JavaScriptによる様々な方法での円周率計算(モンテカルロ法など)

モンテカルロ法

正方形の中に4/1円がある座標軸上に、乱数によりランダムに大量の点(座標)を発生させ、円の内部にある座標の数と円の外部にあるものの比が面積の比になることを利用する。(詳しく)

計算

打つ点の数:

結果

 計算結果説明
ランダム点の数計算した回数
円の中に入った回数ランダム点の数のうち、円内に入ったものの数(x2+y2<1を満たす点の数)
円周率上の2数より得られる円周率
誤差既に判明している円周率から求めた誤差割合
処理時間計算に要した時間

考察

1,000回で誤差3%程度に、10,000回で誤差1%程度に、100,000回で誤差0.1%程度に、1,000,000回で誤差0.05%程度に、10,000,000回で誤差0.01%程度になります。

コンピュータのスペックによっては、10,000,000回以降はきつい場合があります。ブラウザが応答しなくなるかもしれません(><)

あんまり回数を増やすとJavaScriptの疑似乱数の限界にぶちあたる気がします。

総当たり法(モンテカルロ法で乱数を使わない)

モンテカルロ法と同じ理屈だが、乱数ではなく、座標上の全ての点の座標を発生させる。例えば1辺1,000の正方形であれば、1,000,000個の点を打ち、それが円の内部にあるか判定する。

計算

正方形の一辺:
打つ点の数:

結果

 計算結果説明
1辺の長さ(s)一辺の長さ
ランダム点の数計算した回数
円の中に入った回数ランダム点の数のうち、円内に入ったものの数(x2+y2<s2を満たす点の数)
円周率上の2数より得られる円周率
誤差既に判明している円周率から求めた誤差割合
処理時間計算に要した時間

考察

一辺の長さ1,000で誤差1.21%、2,000で誤差0.063%、3,000で誤差0.042%、4,000回で誤差0.031%、5,000で誤差0.025%、6,000で誤差0.021%になりました。

ガウス=ルジャンドルのアルゴリズム

非常に収束が良く、よく使われるアルゴリズム。ガウス=ルジャンドルのアルゴリズム - Wikipedia

計算

計算回数:

結果

 計算結果説明
計算回数計算した回数
aa
bb
tt
pp
円周率上の2数より得られる円周率
誤差既に判明している円周率から求めた誤差割合
処理時間計算に要した時間

考察

1回で誤差0.032%、2回で誤差 0.0000002348%。たった数回でかなり高い精度で得られる。

注意

経緯

ふと風呂で思いついたのでやってみた。実はJavaScriptの処理の進捗をプログレスバーで表してみたかったのだが、計算が早すぎて画面には反映できなかった。(するやり方がわからなかった)

更新履歴
10/01/20:初出
このページについて
JavaScriptによる様々な方法での円周率計算(モンテカルロ法など)
  • konisimple
  • 実験室
  • JavaScriptによる様々な方法での円周率計算(モンテカルロ法など)