SSブログ

モンテカルロ法による、円周率計算(Ruby) [Ruby]

 別記事で紹介した、モンテカルロ法による円周率の計算ですが、BASICでは計算速度が遅いので、C++でプログラムを書いてみました。しかし、速度的にはある程度まで早くなりましたが、計算精度があまりよくないのも事実です。
 そこで、速度はあまり速くないが、計算精度が期待できるRubyでプログラムを書いてみました。
─────
#! ruby -Ks
#
#  2012.04.07 ───── coded by 心如

Kai = 10000000

st = Time.now
s = 0
100.times do |j|
    cnt = 0
    (4 * Kai).times do
        x = rand()
        y = rand()
        r = (x**2 + y**2)**0.5
        cnt += 1 if(r < 1.0)
    end
    puts "#{j}: #{cnt} [#{Time.now - st}sec]"
    s += cnt
end
puts s
─────
Ruby ex010.JPG
 上記の出力は、試しに4億回の計算をした結果です。pi=3.141592654に対して、5桁の精度は出ています。しかし、4億回の計算に約879秒掛かっています。40億回の計算を行うには、単純計算で8,787秒(約2時間半)かかることになります。
 Rubyのような使い勝手がよいプログラミング言語で、C/C++コンパイラのような実行速度の速いプログラミング言語があればよいなと思うのは私だけでしょうか?

(by 心如)


【追記】

Ruby ex010_2.JPG

 Rubyで書いたプログラムで、C++で書いたプログラムと同じ回数(40億回)だけ計算してみました。もっと高い精度になるかも知れないと過大な期待を抱いていましたが、見てのとおり、やっぱり5桁の精度しかありません。モンテカルロ法というのは、この程度のものだということをよく憶えておこうと思いました。


タグ:円周率 乱数
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。