モンテカルロ法 | labunixのラボゆにっくす

labunixのラボゆにっくす

Debian [ Lenny | squueze | kfreebsd ] amd64

一辺が2の正方形の面積を「m」とする。

内接する円は、直径が2なので、r=1、πr^2=πとなる。

これをnとする。

正方形が2x2=4なので、m=4,n=π。

m:n=4:πなので、4*π/4=π、

x2+y2<=1で円の内側か外側かで円周率が近似できる。


■結果の平均を取ってしまうと、期待している精度を、「結果」ではなく、「式の中」に

入れてしまうことになるので、乱数の回数を10倍づつ増やす。


▼Cの場合、以下のソースを「test.c」にコピペ。

「gcc -O3 test.c」で出来た「a.out」を実行。


「みその計算物理学」さん、ありがとう。


http://www.geocities.jp/supermisosan/montecarlo.html


初期値は、1千万。比較のため、7千万、7億、70億にすると、


(1千万) : 3.141130

7千万 : 3.141485

7億 : 3.141585

70億 : 3.141591(15分位かかった)



▼C++版の場合、以下のソースを「test.cc」にコピペ。


system("PAUSE");」はエラーが出るので削除。

「g++ -O3 test.cc -o b.out」で出来た「b.out」を実行


「YuAoki」さん、ありがとう。


http://slashdot.jp/~YuAoki/journal/196582


初期値は70万。


70万 : 3.14116

700万 : 3.14149

7000万 : 3.14159

7億 : int のままでは「overflow」で実行出来ませんでした。


▼Wikipedia 円周率から引用


π = 3.14159 26535 89793 23846 26433 83279 50288 …


http://ja.wikipedia.org/wiki/%E5%86%86%E5%91%A8%E7%8E%87


●使う言語や、アルゴリズム、宣言の型によりますが、

「精度」の意味では、3位までは有効だと考えて良いのではないでしょうか。



■「C、C++」以外にも様々な言語で簡単に実装できます。

今回は精度を確認することが目的ですので、自分ではプログラムを書きませんでした。

「C、C++」が使えない場合は、以下も参考に。


▼EXCEL 用


「中野正勝」さん。


http://aero.kouku-k.ac.jp/nakano/IT3/pi_MC.htm


▼web用


「宍戸 輝光」さん。


http://www.sm.rim.or.jp/~shishido/pie.html