白衣性愛情依存症

2015年4月29日水曜日

モンテカルロ法で円周率を求める【C++】

C++でモンテカルロ法を使って円周率を求めてみました。モンテカルロ法に関してはこちらのページを参考にさせていただきました。ありがとうございます。
PythonとCでモンテカルロ法を用いて円周率を求めてみた | たくのこ Web


環境

 メルセンヌ・ツイスタの乱数生成器と実数の指定した範囲で一様分布させる標準ライブラリを使いました。
打ち込んだ点の個数は1億個です。

コンパイラはclang 3.5、標準ライブラリの実装はlibc++を使いました。
PCのスペックはCPU: i5-3340M、RAM: 4GBです。

結果

結果はこんな感じです。Cのrand()を使うよりも遅いですが、3.1415までは合ってますね。もっと正確な値はこちらにのってます。
ソースは下に貼っておきます。面倒だったので全部main()に詰め込んで書きました()。
毎回乱数のシードを変える場合は、mtなんちゃらの行をコメントアウトされている文で置き換えて下さい。

$ clnag++ calculate_pi.cpp -std=c++14 -stdlib=libc++ -o pi_cpp
$ time ./pi_cpp
3.14151
./pi_cpp 8.78s user 0.00s system 99% cpu 8.784 total