micro:bit でモンテカルロ法を使って円周率を計算するプログラム
この記事では micro:bit を使って円周率を計算するプログラムに挑戦します。モンテカルロ法と呼ばれるアルゴリズムを使い、ランダムな点の座標から円周率を近似します。「アルゴリズムを組めばこんなことも実現できる」という驚きを体験していただくことが目的です。
モンテカルロ法で円周率を近似するアルゴリズムを設計する
プログラムで円周率を計算する方法として、micro:bit に用意されているランダムな数値を出力するパーツを活用します。まず、半径 1 の円と辺の長さ 1 の正方形をイメージしてください。

正方形の中からランダムに点 (a, b) を決めます。この点が半径 1 の円の内側に存在するかどうかを判定します。

点 (a, b) が半径 1 の円の内側にあるかどうかは、原点からの距離 √(a² + b²) が 1 以下かどうかで判定できます。

正方形の面積は 1、半径 1 の円の面積の 1/4 は π/4 です。ランダムに決めた点が円の内側に入る確率は面積の比になります。
- 正方形の面積 : 円(1/4)の面積 = 1 : π/4
- x 回試行して円の内側に入った回数を y とすると → x : y = 1 : π/4
- 整理すると → π = 4y / x
まとめると、次の手順でプログラムを組みます。
- ランダムに点 (a, b) を決め、半径 1 の円の内側にあるかどうかを判定する
- 円の内側に入った回数 y をカウントする
- ①②を x 回繰り返す
- π = 4y / x の式で円周率を計算する
MakeCode で円周率計算プログラムを実装する
まず必要な変数を用意して、x 回処理を繰り返すようにパーツを配置します。

0〜1 のランダムな値は「計算」パーツリストから以下のように作成します。

点 (a, b) の原点からの距離 length を求めます。平方根も「計算」パーツリストから取得できます。

length が 1 以下かどうかを判定し、円の内側の点をカウントします。

最後に π = 4y / x の計算結果を LED に表示します。

micro:bit にダウンロードして動作を確認してください。3.14… に近い値が表示されるはずです。ランダムな値を使うため稀に値がずれることがありますが、試行回数 x を増やすことで精度が向上します。理論上は x を大きくするほど真の円周率に近づきます。
まとめ
この記事では micro:bit でモンテカルロ法を使った円周率の近似計算を実装しました。ランダムな点の座標と面積の比という数学的な考え方をプログラムで表現する体験を通じて、アルゴリズム設計の面白さを感じていただければ幸いです。





ディスカッション
コメント一覧
はじめまして。
還暦を数年前に通り過ぎてしまったオヤジです。
ボケ予防にと micro:bit を購入してブロック形式でプログラミングを勉強しております。
micro:bit を検索キーワードにして、あちこち参考にさせて頂いております。
こちらの WEB ページは他のところとはかなり違い、とてもよい教科書として使用させて頂いております。
円周率の計算のところで、x の回数が 300,000 回程度ループさせないと 3.14 という値が安定して出ないのにはビックリしました。
最近は micro:bit の記事が少ないようで残念です。
貴重な情報提供して頂き、ありがとうございます。
今後もよろしくお願い致します。
尾崎様
丁寧にコメント頂き有難うございます。
最近は新しい記事も投稿できていない状況ではありますが、また何か面白いネタがありましたらこちらで記事にさせて頂きたいと考えております。
今後とも宜しくお願い致します。