使い方
最小値と最大値を入れ(負の数も可)、生成したい個数と重複の可否を選びます。本ツールは指定した範囲から、暗号学的に一様な整数を取得します。重複なしの場合は部分 Fisher–Yates シャッフルを使うので、たとえば 1〜1,000,000 から 100 個選ぶような場合でも高速で、結果は厳密に一様です(棄却ループが暴発することはありません)。結果は昇順で表示するので、最小・最大を一目で確認できます。引いた順序より、抽選結果を番号順に読み上げる場面(懸賞の発表、ロト番号の表示など)のほうが多いためです。
計算式
N は生成個数、min と max は両端を含む範囲。「棄却サンプリング」とは、剰余を取った場合に範囲の下端だけが多く出てしまう「あまり領域」に落ちたバイトを捨ててやり直すことで、サイコロの計算と同じ一様性確保の手法です。Fisher–Yates の部分シャッフルは、「カードをすべてシャッフルして上から N 枚取る」を「N 枚分だけシャッフル相当の処理を行う」に簡略化したアルゴリズムで、時間計算量は O(N)、メモリは O(max-min) です。
計算例
- ロト6(1〜49 から 6 個):min=1、max=49、個数=6、重複なし → 例:[4, 11, 19, 27, 33, 42]。
- コイン投げシミュレーション:min=0、max=1、個数=20、重複あり → 0/1 が 20 個(統計の説明用)。
- 気温の偏差サンプル:min=-30、max=45、個数=1 → 例:-7。
よくある質問
小数(例:0.0〜1.0)も生成できますか?
直接は対応していません。本ツールは整数を返します。たとえば 0.0〜1.0 を 0.001 刻みで欲しいなら、整数で 0〜1000 を生成して 1000 で割ってください(暗算でも、表計算ソフトでも可)。任意精度の対応は将来的に「小数桁数」オプションを追加する余地はありますが、実際の用途(抽選、ダイスのような選択、離散値リストからの抽選など)の 95% 以上は整数版でカバーできます。
なぜ結果は並べ替えられて表示されるのですか?
抽選の当選番号、宝くじの数字、サンプリングなど、多くの用途では「引いた順序」より「どの番号が出たか」を一目で確認したいことがほとんどだからです。昇順表示にしておけば、最小値と最大値もすぐ把握できます。順番自体に意味があるとき(順位付けなど)は、個数を 1 にして 1 個ずつ生成し、その都度結果をコピーしてから次を生成してください。
「重複あり」と「重複なし」では何が違いますか?
「重複あり」は、毎回独立に乱数を引くため、同じ数が同じセット内に2回以上現れることがあります(統計用語では「復元抽出」)。コイン投げのシミュレーションや、独立したテスト値を連続で生成したいときなどに使います。「重複なし」は、同じセット内で同じ数が1回しか現れない方式で、袋からボールを取り出して戻さない「非復元抽出」に相当します。抽選券、宝くじの番号、メンバーリストからチーム分けなど、枠が有限の場面で使います。
範囲や個数に上限はありますか?
個数は読みやすさのため上限を 500 に制限しています。範囲そのものは32ビット整数の限界、おおよそ ±20億 まで使えるため、通常用途で上限に当たることはありません。重複なしを選んだ場合は、当然ながら個数 ≤ (max − min + 1) でなければなりません(50 個分しかない範囲から 100 個の重複なしは引けません)。不可能な指定をするとエラー表示が出ます。