micro:bit でモンテカルロ法を使って円周率を計算するプログラム

2026年6月2日

この記事では micro:bit を使って円周率を計算するプログラムに挑戦します。モンテカルロ法と呼ばれるアルゴリズムを使い、ランダムな点の座標から円周率を近似します。「アルゴリズムを組めばこんなことも実現できる」という驚きを体験していただくことが目的です。

モンテカルロ法で円周率を近似するアルゴリズムを設計する

プログラムで円周率を計算する方法として、micro:bit に用意されているランダムな数値を出力するパーツを活用します。まず、半径 1 の円と辺の長さ 1 の正方形をイメージしてください。

半径 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

まとめると、次の手順でプログラムを組みます。

  1. ランダムに点 (a, b) を決め、半径 1 の円の内側にあるかどうかを判定する
  2. 円の内側に入った回数 y をカウントする
  3. ①②を x 回繰り返す
  4. π = 4y / x の式で円周率を計算する

MakeCode で円周率計算プログラムを実装する

まず必要な変数を用意して、x 回処理を繰り返すようにパーツを配置します。

変数と繰り返しブロックを配置した状態

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

0〜1 のランダムな値を生成するパーツ

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

距離 length を計算するプログラム

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

length が 1 以下かどうかを条件分岐で判定するプログラム

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

円周率を計算して LED に表示する完成プログラム

micro:bit にダウンロードして動作を確認してください。3.14… に近い値が表示されるはずです。ランダムな値を使うため稀に値がずれることがありますが、試行回数 x を増やすことで精度が向上します。理論上は x を大きくするほど真の円周率に近づきます。

まとめ

この記事では micro:bit でモンテカルロ法を使った円周率の近似計算を実装しました。ランダムな点の座標と面積の比という数学的な考え方をプログラムで表現する体験を通じて、アルゴリズム設計の面白さを感じていただければ幸いです。