乱数生成 — 範囲を指定してランダムな数字
範囲・重複なし・小数に対応した、暗号学的乱数による乱数生成ツール
ブラウザー内で処理・アップロード不要
乱数生成ツールとは
最小値・最大値・個数を指定すると、その範囲からランダムな数字を選びます。抽選や順番決め、テストデータ作り、ボードゲームのハウスルールなど、誰も選んでいない数字が欲しいときに使えます。負の数の範囲にも対応し、桁数を決めて小数を生成することもできます。処理はすべてブラウザーのタブ内で行い、設定や結果をサーバーへ送信することはありません。
使い方
- 整数か小数を選びます。
- 最小値と最大値を入力します。両端の値も出る対象に含まれます。
- 生成する個数を1〜10,000で入力します。
- すべて異なる数にしたい場合は重複なしをオンにします。小数の場合は小数点以下の桁数も選びます。
- 生成を押します。結果を見ながら並び順や区切りを変え、コピーで持ち出せます。
仕組み
- 乱数の出どころ:
crypto.getRandomValuesによる32ビットの値だけを使います。Math.randomは使いません。 - 均等性:32ビットの値を範囲の大きさで割った余りをそのまま使うと、小さい数がわずかに出やすくなります。そこで端数にあたる値を捨てて引き直し(棄却サンプリング)、どの数も同じ確率にしています。
- 非常に広い範囲:範囲が2^32を超える場合はBigIntで計算するため、±9,007,199,254,740,991の全範囲でも偏りません。
- 重複なし:Floydのサンプリングアルゴリズムで、範囲全体を列挙せずに指定した個数だけを選びます。どの組み合わせも同じ確率で選ばれ、並び順を指定しなければ順番もシャッフルされます。
- 小数:範囲内にある10^-桁数刻みの値(2桁なら0.01刻み)から均等に選び、正確な文字列として表示するので、浮動小数点の誤差は出ません。
- 表示オプション:並び順と区切り(カンマ・スペース・改行)は、生成し直さずに表示だけを変えます。
例
| 設定 | 結果の例 |
|---|---|
| 1〜43、6個、重複なし、昇順 | 3, 11, 19, 27, 38, 42 |
| -10〜10、5個 | 7, -3, -3, 0, 10(負の数・重複あり) |
| 0〜1、小数点以下2桁、3個 | 0.27, 0.84, 0.05 |
| 1〜100、1個 | 1〜100のいずれか1つ |
よくある質問
本当にランダムですか?Math.randomとは何が違いますか?
ブラウザーに組み込まれた暗号学的乱数生成器(crypto.getRandomValues)だけを使い、Math.randomは使いません。また、小さい数が出やすくなる偏り(モジュロバイアス)を避けるため、偏りの原因になる一部の値を捨てて引き直します(棄却サンプリング)。そのため、範囲内のどの数も出る確率はまったく同じです。
重複なしで、範囲内の数より多い個数を指定するとどうなりますか?
1〜5から異なる数を6個選ぶことはできないため、エラーを表示して何も生成しません。範囲を広げるか個数を減らしてください。範囲が非常に広くても、処理は指定した個数分だけなので高速です。
どれくらい大きな数まで使えますか?
整数モードでは、JavaScriptで正確に扱える整数の上限である-9,007,199,254,740,991〜9,007,199,254,740,991の範囲を指定できます。一度に生成できるのは1〜10,000個です。
並び順や区切りを変えると、数値も変わりますか?
変わりません。並び順と区切りは、生成済みの数値の表示方法を変えるだけです。新しい数値が必要なときは「生成」を押してください。