ブログ
日本語

乱数生成 — 範囲を指定してランダムな数字

範囲・重複なし・小数に対応した、暗号学的乱数による乱数生成ツール

ブラウザー内で処理・アップロード不要

数値の種類
並び順
区切り
結果

まだ生成していません。「生成」を押してください。

乱数生成ツールとは

最小値・最大値・個数を指定すると、その範囲からランダムな数字を選びます。抽選や順番決め、テストデータ作り、ボードゲームのハウスルールなど、誰も選んでいない数字が欲しいときに使えます。負の数の範囲にも対応し、桁数を決めて小数を生成することもできます。処理はすべてブラウザーのタブ内で行い、設定や結果をサーバーへ送信することはありません。

使い方

  1. 整数か小数を選びます。
  2. 最小値と最大値を入力します。両端の値も出る対象に含まれます。
  3. 生成する個数を1〜10,000で入力します。
  4. すべて異なる数にしたい場合は重複なしをオンにします。小数の場合は小数点以下の桁数も選びます。
  5. 生成を押します。結果を見ながら並び順や区切りを変え、コピーで持ち出せます。

仕組み

  • 乱数の出どころ: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個です。

並び順や区切りを変えると、数値も変わりますか?

変わりません。並び順と区切りは、生成済みの数値の表示方法を変えるだけです。新しい数値が必要なときは「生成」を押してください。

ほしいツールはありますか?