CLang

やっぱりC

モンテカルロ法でPiを計算するプログラムをC言語に書き換えると以下のようになります.

#include <stdio.h>
#include <stdlib.h>

int main(void){
  int N,i;
  scanf("%d",&N);
  double x,y,r2,S=0;
  for (i=0;i<N;i++){
    x=(double)rand()/RAND_MAX;
    y=(double)rand()/RAND_MAX;
    r2=x*x+y*y;
    if (r2<1.0) S+=1;
  }
  printf("%6d,%10.5f\n",N,4.0*S/N);
}

これを

[BobsNewPBG4-6:~/NumRecipeEx07/CLang] bob% gcc Pi0.c

でコンパイルして,実行時間を計ってみます.上がC言語版,下がRuby版です.

[BobsNewPBG4-6:~/NumRecipeEx07/CLang] bob% time ./a.out
10000000
10000000,   3.14188
0.702u 0.002s 0:06.12 11.4%     0+0k 0+0io 0pf+0w
[BobsNewPBG4-6:~/NumRecipeEx07/Week5] bob% time ruby pi0.rb
10000000
3.1417264
17.047u 0.015s 0:24.34 70.0%    0+0k 0+0io 0pf+0w

だいたいこの計算で24倍の差がでています.Rubyで1日かかる計算がC言語だと1時間でできる勘定です.

課題1

モンテカルロ法の試行回数(1e5,1e6,1e7,1e8)と変えて,かかる時間を計測せよ.時間の計りかたは下記のスクリプトを参照せよ.さらに,gnuplotで両対数プロットせよ.

t1=Time.now
sleep(1)
t2=Time.now
puts t2-t1

Ruby版のモンテカルロ法とも比較せよ.

課題2

台形近似に基づく数値積分でPiを求めるプログラムをC言語で書け.計算時間の計測,Ruby版との比較,gnuplotによるグラフ表示をそれぞれおこなえ.

Last modified:2007/08/19 21:53:57
Keyword(s):
References:[LinuxEx]