モンテカルロ法による π の推定
生成処理はすべてブラウザ内で完結します。データは送信されません
原理は一行です。一辺 1 の正方形にランダムに点を打つと、四分円の内側に入る割合はおよそ π/4 になります —— 四分円の面積が π/4 で、正方形が 1 だからです。したがって `π ≈ 4 × 円内の点数 ÷ 全点数` です。 精度は 1/√n のオーダーしかありません。これははっきり書いておく必要があります。 誤差はサンプル数の平方根で減ります:小数第 1 位を増やすにはサンプルを 100 倍にします。100 万点でようやく 3 桁程度、1 億点で 4 桁です —— 一方π の桁を調べるツールは小数第 1 万位まで直接返します。つまりこのツールの価値はπ を計算することにはなく、モンテカルロ法の最小の動く例であること、そして「桁を 1 つ増やすのに 2 桁ぶんのサンプルが要る」ことを目に見える形にすることにあります。 収束の過程を出すのはなぜか。 最終値だけでは、その推定がたまたま良かったのか本当に収束したのかが分かりません。10 の累乗ごとの累積推定値を並べれば、3.14159… にじわじわ近づく様子と、値のばたつき方が見えます。 乱数源は `Math.random` ではなく `crypto.getRandomValues` です。
機能
- 四分円の内側に入る割合を 4 倍して π を推定
- サンプル数・円内の点数・推定値・相対誤差を表示
- 10 の累乗ごとの収束を表示し、精度の上がり方を見られる
- サンプル数は最大 200 万点まで(約 1 秒)
- 誤差は相対値なので、1/√n のオーダーと直接見比べられます
- 乱数源は `crypto.getRandomValues`。値の間で使い回しません
- 実行ごとに結果は少し変わります。「再実行」で引き直せます
- すべて端末内で計算し、外部への通信はありません
使い方
- サンプル数を入力します(既定は 100 万点)
- 結果欄の推定値と相対誤差を読みます
- 収束の過程まで見ると、10 倍ごとに何が得られるかが分かります
- 「再実行」で新しい点の一批を引き直せます
よくある質問
- 推定値が 3.14 の周りでばたつくのはなぜですか?
- これは手法そのものの性質で、実装の不具合ではありません。モンテカルロ法の誤差は 1/√n で減ります —— サンプルを 100 倍にしても誤差は 1/10 にしかなりません。100 万点でも相対誤差は 0.1% 程度、つまり小数 3 桁ぶんの安定です。正確な π が欲しい場合は定数の桁ツールが組み込みの 1 万桁をそのまま返します。
- このツールには何の意味がありますか?
- 2 つあります。1 つ目は、モンテカルロ法の最小の動く例であること —— 原理は一行で理解でき、しかも「決まった量をランダムな標本で推定する」という、金融価格の算定、物理シミュレーション、ベイズ推論の土台にある考え方そのものを示しています。2 つ目は、収束の遅さを見える形にすること:表では 1000 点と 100 万点の推定値はあまり違いませんが、サンプル数は 1000 倍になっています。この感覚は式だけでは身につきません。
- サンプル数はいくつが適切ですか?
- 何を見たいかによります。収束の様子だけなら 1 万点で十分(即座に出ます)。3.14159 に近い推定値なら 100 万点で 200 ミリ秒ほど、誤差は通常 0.1% 以内です。200 万点が上限です —— それ以上は手法の性質(√n の項)で効果が決まり、待ち時間だけが目立って延びます。
関連ツール
π と e の桁
早見表円周率 π(1 万桁)と自然対数の底 e(5,000 桁)の任意の範囲を取り出し、数字列が何桁目に現れるかも調べられます。既知の値と照合済みです。
乱数ジェネレーター
生成範囲・個数・小数桁を指定して乱数を生成します。重複の排除、並べ替え、2・8・16 進数での出力にも対応。乱数源は暗号学的乱数です。
フィボナッチ数列
生成フィボナッチ数列の先頭 N 項、任意の 1 項、範囲を生成します。ある数が何番目かの逆引きも可能。BigInt なので 1000 項でも正確です。
UUID 生成
生成UUID v4・v7・v8・ULID・NanoID・CUID・ショート ID・MongoDB ObjectId を一括生成。乱数はブラウザの暗号 API から取得し、通信も記録もしません。
ダミーテキスト
生成ダミーテキストを生成します。Lorem ipsum・英語の文・中国語・日本語のダミー文から選べます。段落・文・単語単位で出力。すべてブラウザ内で生成します。
モックデータ
生成「フィールド名:型」を数行書くだけで、形式が本物そっくりのモックデータをまとめて生成。JSON・CSV・TSV・SQL・XML・YAML・TOML で出力できます。