使い方
はい/いいえの決定、先攻後攻決め、譲り合いがつかないときの最終手段に使えるデジタルのコイントスです。本ツールは `crypto.getRandomValues`(ブラウザがセキュリティトークン生成にも使う乱数源)から1ビットの乱数を取得しており、結果はぴったり50/50です。Math.random によるバイアスのある近道は使っていません。短い回転アニメーションで「ちゃんと振られた」ことを視覚的に示してから結果が確定します。履歴バーには直近30回分が残り、カウンターは投げるたびに更新されるので、公平性の確認や、大数の法則を子どもに見せたいときにも便利です。
計算式
crypto.getRandomValues は、OSがシードを与える暗号学的に安全な擬似乱数生成器(CSPRNG)から得た乱数バイトでバッファを埋めます。`& 1` で最下位ビットだけを残せば、0 または 1 が一様に得られ、ちょうど 50/50 です。実用上は Math.random でも同等の公平さですが、getRandomValues を使えば実装上の細部に触れず「公平」と言い切れます。
計算例
- 「コインを投げる」をタップ。
- 乱数バイトを取得し、最下位ビットで結果を決定。
- ビットが 0 なら表、1 なら裏。
- 十分な回数を重ねると、表裏の比率は 50/50 に収束していきます(大数の法則)。
よくある質問
本当に公平ですか?どちらかに偏っていませんか?
本当に 50/50 です。投げるたびにブラウザの暗号学的乱数生成器から新しいバイトを取得し、その最下位ビットを使っています。隠しの状態も「連続を補正する」ようなロジックも、「次は裏のはず」と判断する仕組みもありません。10〜20回程度の少数では、表や裏が4〜6回続くこともよくありますが、これは偏りではなくランダムの正しい振る舞いです。1,000回投げれば、結果は 500/500 から数%以内に収まります。
結果が出る前にコインが回転するのはなぜですか?
完全に UX のためです。結果はボタンを押した瞬間に決定し、ビットを取得して内部で保持しています。ただ、表示までに 480 ミリ秒のアニメーションを挟むことで、利用者の脳が「いま振られた」と認識する間を作っています。即時に答えを出すと「本当に振った?」と壊れて見えますし、0.5 秒以上待たせると遅く感じます。480 ms は実物のコインが空中にある時間にだいたい近い長さです。
大事な決定に使っても結果は信頼できますか?
統計的には信頼して構いません — 仕組み自体は健全です。ただ、本当に問うべきは「その決定にコイントスを使うべきかどうか」です。本当にどちらでも良いとき(昼食をどちらに食べに行くか、次の映画を誰が選ぶかなど)はコイントスで十分です。一方、表面上は互角に見えるけれど内心では片方を望んでいる選択なら、結果が出た瞬間の自分の反応を観察してみてください。その直感的な反応こそが、実はコインの結果よりも重要な情報になります。
「3回中2回」「5回中3回」のような方式はできますか?
専用モードはありませんが、リアルタイムのカウンターと履歴バーで同じことができます。3回振って、表と裏のカウントを見比べ、2回以上出た方を採用すれば「3回中2回」になります。とはいえ、ベスト・オブ・N にしても確率は変わりません。1回の 50/50 を受け入れられるなら、3回多数決でも結局 50/50 です。この方式を選びたくなるときは、実際以上に「慎重に決めた」体裁を整えたい心理が働いていることが多く、本来は別の意思決定方法のほうがふさわしいサインかもしれません。