サイコロだけを使って円周率を求めてみた

ただしシミュレーションです。エクセルを使いました。
今回は10*5000回で、5万回サイコロを振ったことになっています。
・・5万回もサイコロ振りたくない〜!

表をクリックすると表全体が確認できます。
試行回数1回あたり、サイコロを10回振ります。

=INT(RAND()*6)+1

2つの数字をつくる

最初の5回で一つ、残りの5回で一つ、それぞれ5桁の数字をつくります。サイコロの目を順番にくっつけるだけです。
ただしサイコロは1〜6の数字が出ますが、0〜5の数字にしたかったので、各桁から1ずつを引きました。
例えば、試行回数1回目では、出た目をつなげると「22526」ですが、各桁から1ずつを引いて「11415」としました。

=(C10-1)*10^4+(D10-1)*10^3+(E10-1)*10^2+(F10-1)*10+G10-1
※「サイコロの目」x軸「1」がC列です。

こうして出来上がった数字は6進数です。

10進数に変換!

これを10進数に変換します。

=(C10-1)*6^4+(D10-1)*6^3+(E10-1)*6^2+(F10-1)*6+G10-1
※「サイコロの目」x軸「1」がC列です。

これで10進数に変換できました。

0〜1の数値に変換

次に、10進数に変換された数値を「7775」で割ります。
「7775」とは、6進数5桁で表される最大の数値「55555」を10進数に変換した数値です。
「7775」で割ることで、数値を「0〜1に変換」できました。
「0〜1に変換」に変換された2つの数値x,yについて、「x^2+y^2」を計算し、1以下なら「1」1を超えるなら「0」を判定結果とします。

=IF(T10*T10+U10*U10<=1,1,0)

数えるだけ

表の右上「円内回数」は判定が「1」となった回数です。

=COUNT(W:W)
=COUNTIF(W:W,1)

円周率は、円内回数÷試行回数×4で計算しています。
試行回数のうち、何回が「x^2+y^2<=1」になったか?を数えて4倍する計算です。


今回は5桁、5000回で行いました。計算された円周率は小数点2桁目が怪しいです。再計算するとコロコロ変わります。
桁数や回数を増やすことで、どんどん正確になっていきます。

乱数を使った、このような計算を「モンテカルロ法」といいます。
また、一様乱数をつかって「モンテカルロ法」で円周率を求めるというのは、「モンテカルロ法」の例としてよく出てくる話です。
ただこのシミュレーションの特徴は、「サイコロの目」から一様乱数を作るために、「6進数」→「10進数」の変換を使ったところかなと思っています。

サイコロだけで円周率が求まるなんて、面白いと思いませんか?

にほんブログ村 iPhone