乱数生成ツール
任意の範囲で、重複ありまたは重複なしの乱数を1個または複数個生成します — 暗号論的な乱数性を使用。
1,453回閲覧
数字は実際どのように生成されているのか
「ランダム」がすべて同じ品質というわけではありません。どのブラウザにも搭載されているMath.random()は高速な疑似乱数生成器です — 内部的には決定的であり、原理的には、内部状態を知っている人であれば予測可能です。そのため、実際に賞品がかかった抽選のような、セキュリティ上重要な用途には向いていません。このツールでは代わりに、ブラウザに組み込まれた暗号論的に安全な乱数生成器であるcrypto.getRandomValues()を使用します。これはオペレーティングシステムのエントロピー源から値を取得するため、原理的にも予測不可能です。
ただし、安全な乱数源を持つことは問題の半分しか解決しません。乱数値を特定の範囲(例えば1〜100)へ単純に — random % 100のように — マッピングすると、微妙ながら現実に存在する剰余バイアスが生じます。生成器の生の出力範囲は通常100の正確な倍数ではないため、一部の余りが他よりもわずかに出やすくなってしまうのです。このバイアスは小さいものですが確かに存在し、多くの抽選を重ねるごとに積み重なります — 公平であるはずの抽選には本来あってはならない類のものです。
この解決策が棄却サンプリングです:すべての生の値を剰余演算で無理やり範囲に押し込む代わりに、範囲外となる生の値は捨てられ、目標範囲の正確な倍数にきれいに収まる値が出るまで新たに抽選し直します。これにより真に一様な分布が保証されます — 範囲内のすべての数字が完全に等しい確率を持ちます — コストとしてまれに1、2回の追加抽選が必要になりますが、実際の処理速度ではまったく体感できません。
最小値、最大値、必要な個数を選んでください。同じ応募が二度当選してはいけない抽選、賞品くじ、サンプリング、ゲームなどで必要となる重複なしにチェックを入れると、重複を防げます。すべての処理はお使いの端末上で行われます — どの数字もどこにも送信・保存されず、ページを更新すればまったく新しい抽選が行われます。
知っておきたいこと
- 剰余バイアスは数回の抽選では見えませんが、数千回にわたると統計的に検出可能になります — 棄却サンプリングは、それを単に小さくするのではなく完全に取り除きます。
- crypto.getRandomValues()が「暗号論的に安全」であるということは、過去の出力を見たことがある人でさえその出力を予測できないことを意味します — これはMath.random()が明確に持たず、そもそも持つように設計もされていない性質です。
- 範囲は両端を含みます:1〜10の抽選では、1と10のどちらも出る可能性があり、その間の値だけに限られません。
- 監査可能な抽選を行うには、参加者に1からNまでの番号を割り振り、それに合わせて範囲を設定し、重複なしを有効にして、結果のスクリーンショットを撮ってください。抽選後はサーバー側に何も保存されないためです。
よくある質問
この数字は本当にランダムですか、それとも「十分にランダム」というだけですか?
これらはオペレーティングシステムの暗号論的エントロピー源から得られるcrypto.getRandomValues()によって生成されます — 多くの簡易的な乱数スクリプトが使う単純なMath.random()とは異なり、実用上だけでなく原理的にも予測不可能です。
剰余バイアスとは何ですか、このツールにはそれがありますか?
乱数値をrandom % Nのように単純に範囲へマッピングすると、一部の数字がわずかに他より出やすくなります。生成器の生の出力範囲が通常Nの正確な倍数ではないためです。このツールは棄却サンプリングによってこれを回避します:範囲外の生の値は捨てられ、一様な結果が保証されるまで再抽選されます。
棄却サンプリングとは、平たく言うと何ですか?
すべての乱数値を剰余演算で無理やり範囲に押し込む代わりに、バイアスを生む値は単純に捨てられ、新しい値が抽選されます — 範囲に完全かつ均等に収まる値が出るまでこれを繰り返します。コストはまれに発生する追加の抽選、利点は真に一様な結果です。
賞品の抽選に使えますか?
はい。参加者に1からNまでの番号を割り振り、それに合わせて範囲を設定し、重複なしを有効にして、必要な人数分の当選者を生成してください。抽選後は結果がどこにも保存されないため、記録用にスクリーンショットを撮っておいてください。
最小値と最大値はどちらも範囲に含まれますか?
はい — 範囲は両端を含みます。1〜10の抽選では、帽子から番号札を引くのとまったく同じように、1と10のどちらも出る可能性があります。
関連ツール
問題を報告
乱数生成ツール
コメント
まだコメントはありません — 最初のコメントを書いてみましょう!