単純な数値計算で速度比較

数値計算といえばC/C++とかそんなイメージですが(fortranとか)
Javaだとどうなのか?というところからどっかのサイトに乗ってたアルゴリズムを使って時間を計りました.

※凄い雑なので,ループが多くて割り算があってくらいのプログラムです.
※オマケでRubyもやってみました

  • プログラム
#include <cstdlib>
using namespace std;

int main(int argc, char** argv) {

    double sum = 0;
    for(int i=0;i<1000*1000*1000;i++){
        sum+=1./(double)(i+1)/(double)(i+1);
    }   

    return 0;
}
public class Main{
  public static void main(String args[]){
  double sum=0.;
  for(int i=0;i<1000*1000*1000;i++){
    sum+=1./(double)(i+1)/(double)(i+1);
  }
  System.out.println(sum);  
  }
}
object Main {

  def main(args: Array[String]): Unit = { 

  var sum = 0.0;
  for(i <- 0 to 1000*1000*1000){
    sum += 1.0/(i.toDouble+1.0)/(i.toDouble+1.0)
  }
  }
}

RubyはDoubleではなくfloatで(そして,あくまでforです)

sum = 0.0 

for i in 0 .. 1000*1000*1000
  sum += 1.0/(i.to_f+1)/(i.to_f+1)
end
  • 実行結果(timeで測定)
C 21.73s
Java 18.10s
Scala 19.14s
Ruby 772.10s
Python 587.06s

結構Javaで書いてもいいんじゃないかなあという結果.
Rubyで書いてはいけない.