このジェネレーターが向く用途と向かない用途
擬似乱数生成器は、何に適しているかが大きく異なります。これは高速で再現可能、日常的な用途には統計的にも良好であり、そして秘密を作る道具ではまったくありません。
| 用途 | 適するか | 理由 |
|---|---|---|
| 教育、シミュレーション、標本抽出 | 適する | 抽出が再現できることが利点になる |
| 当選者選び、さいころ、宝くじの番号 | 適する(新しいシードで) | シードを知る人は抽出を再現できる |
| パスワード、鍵、トークン、セッションID | 適さない | 出力から内部状態を復元できる。パスワード生成ツールをお使いください |
| 規制対象のギャンブル | 適さない | 認証されたハードウェアまたは暗号学的生成器が求められる |
- 範囲の両端が含まれるため、1から100の範囲には100個の値があります。
- 非復元抽出では、抽出数が範囲内の値の個数を超えることはできません。このツールは黙って重複させるのではなく拒否します。
擬似乱数生成器とは
擬似乱数生成器は、乱数性の統計的検定に合格する列を生み出す決定論的なアルゴリズムです。物理的な意味で乱数なのではありません。固定された漸化式であり、与えられた初期値——シード——からは常に同じ列を生みます。
これは32ビットの xorshift 生成器で、George Marsaglia が2003年に Journal of Statistical Software に発表したものです。ある値と、それをシフトした複製との排他的論理和を繰り返し取ります。用いるシフトの三つ組は、列が繰り返しに入る前に非ゼロの32ビット状態をすべて巡るように選ばれています。
シード方式は制約ではなく意図です。本サイトのすべての計算ツールは入力の純粋な関数であり、それこそが結果を再現可能で検証可能にしています。さらに、時計で駆動する生成器にはできないことができます。数字と一緒にシードを示せば、誰でもあなたの抽出をそのまま再現できます。
使い方
- 最小値と最大値を設定します。両端とも範囲に含まれます。
- 何個引くかを選びます。
- 重複を許すかどうかを決めます。非復元抽出ではどの値も2度は出ないため、範囲が含む個数より多くは引けません。
- 別の抽出が欲しいときはいつでもシードを変えてください。同じシードなら常に同じ数字が返ります。
数字が作られる仕組み
xorshift の漸化式は1回の抽出ごとに32ビットの状態を3回変換し、そのあと 2^32 で割って0以上1未満の値を得ます。これに範囲の大きさを掛けて切り捨てると整数に対応づけられます。
非復元抽出には、範囲に対する部分的な Fisher-Yates シャッフルを用います。1回の抽出ごとに残りの要素を1つ所定の位置へ入れ替えるので、一度の走査で一様ランダムな部分集合が選ばれ、候補が減るにつれて「引いてやり直す」方式のように行き詰まることがありません。
よくある間違い
- 秘密に関わる用途に擬似乱数生成器を使うこと。列はシードによって完全に決まります。
- シードを変えずに新しい数字を期待すること。再現できることが目的であり、シードがその操作子です。
- 上限が含まれないと思うこと。ここでは範囲の両端が含まれます。
- 範囲が持つ個数より多くの異なる値を求めること。
- 似た値が続くのを不具合と考えること。かたまりは乱数列の正常な性質であり、それが無いほうがむしろ不自然です。
よくある質問
同じシードで常に同じ数字になるのはなぜですか?
擬似乱数生成器が決定論的な漸化式であり、シードがその初期状態だからです。これは欠点ではなく長所です。シードを示せば誰でもあなたの抽出をそのまま再現でき、再現可能な研究や授業での実演にはまさにそれが必要です。違う抽出が欲しいときはシードを変えてください。
抽選に使えるほど乱数として十分ですか?
非公式な抽選なら十分です。ただし参加者が予測できないシードを選び、結果を検証できるよう後で公表することが条件です。規制対象のギャンブルには不十分で、そこでは認証されたハードウェア生成器か暗号学的に安全なアルゴリズムが求められます。
これでパスワードを作れますか?
作れません。xorshift 生成器の内部状態は出力の短い並びから復元できるため、そこから導いたものはすべて予測可能です。本サイトのパスワード生成ツールをお使いください。こちらはOSの暗号学的に安全な乱数源から取得します。
非復元抽出とはどういう意味ですか?
どの値も2度以上は出ないという意味で、宝くじの玉を引くのと同じです。1回引くごとに候補から値が1つ取り除かれるため、範囲が含む個数より多くは引けません。5個の範囲から異なる6個を引くことは不可能です。
数字は一様に分布していますか?
はい、基盤となる生成器の精度の範囲で一様です。範囲内のどの値も同じ確からしさで現れ、非復元モードは部分的な Fisher-Yates シャッフルを用いるため、与えられた大きさのどの部分集合も同じ確率で選ばれます。
参考文献
- Marsaglia G. Xorshift RNGs. Journal of Statistical Software 2003; 8(14): 1-6. doi:10.18637/jss.v008.i14.
- Knuth DE. The Art of Computer Programming, Volume 2: Seminumerical Algorithms, 3rd edition. Addison-Wesley, 1997 — random number generation and statistical testing.
- Fisher RA, Yates F. Statistical Tables for Biological, Agricultural and Medical Research. Oliver and Boyd, 1938 — the shuffle used for sampling without replacement.
- L'Ecuyer P, Simard R. TestU01: A C library for empirical testing of random number generators. ACM Transactions on Mathematical Software 2007; 33(4): 22.