シミュレーションと再帰で
アルゴリズムの面白さを味わおう

講師 矢沢 久雄

図6●ランダムに矢を打って円周率を求める

円周率も乱数で求めてしまおう

 円周率は,3.1415926・・・である。驚くべきことに,この値もコンピュータ・シミュレーションで求めることができる。もちろん,コンピュータ・シミュレーションを用いない方法もある。例えば,マーチンの公式テイラー展開すれば,繰り返し計算により必要なけた数の円周率を正確に求めることもできる。

【問題3】円周率を求めよ。

 ここでは,乱数を利用して円周率を求めてみよう。仕組みは単純で,まず正方形とそれに内接する円を描画する。これを標的に見立ててランダムに矢を放つのである(図6[拡大表示])。

図7●円の内部に当たる確率の4倍が円周率になる
 矢が円の内部に当たる回数と円の外に当たる回数は,円の面積と円以外の領域の面積に比例する。この関係を利用すれば,円周率を求めることができる。円の内部に当たる確率の4倍がちょうど円周率になる(図7[拡大表示])。早速,コンピュータ・シミュレーションで実験してみよう。

 図8[表示]のプログラムは,テキスト・ボックスに入力された回数だけ矢を放って,それが円の内部に当たったかどうかを判定し,その結果から円周率を算出するものである(写真3[拡大表示],図9[拡大表示])。ウインドウに正方形とその内接円を描き,矢が当たった位置にドットを描くようにしている。実際に実験していただいてもよいが,表1[表示]に矢を放つ回数を10回~10万回としたときの実験結果を示しておこう。丸い的にでたらめに矢を打つことで,円周率が求められてしまうのである。ちょっとした驚きと感激を感じるのではないだろうか。

写真3●図8の実行結果
矢を射る回数が100回の場合
図9●円の内部に当たったことの判定方法
円の公式を利用すれば,当たった座標が円の中か外かが分かる
 表1から,コンピュータ・シミュレーションの特徴の一つを知ることができる。実験回数を増やせば増やすほど正確な値に近い結果が得られることである。どの程度まで回数を増やせばよいかは,皆さんの辛抱強さによって決まる。いくらコンピュータが高速であるといっても,何億回も繰り返して実験を行うためには長い時間が必要となるからだ。円周率を求めるコンピュータ・シミュレーションは,最大で4億回程度矢を放つことができる。どこまでが皆さんのガマンの限界かを確かめてみるとよいだろう*2