下限と上限を入力して「計算する」を押すと、その範囲の乱数を生成します。個数・小数点以下の桁数・重複のあり/なしも指定できます(下限と上限以外は空欄でもOK。空欄なら「整数を1個・重複あり」です)。
このページでできること
- 下限と上限を入れるだけで、その範囲の乱数(ランダムに選ばれた数)がその場で作れます
- 整数だけでなく小数の乱数も作れます。小数点以下の桁数は0〜50桁で指定できます
- 一度に最大999個まで生成でき、重複の「あり・なし」も選べます。2個以上作ると、生成した順番に加えて昇順・降順に並べ替えた結果も同時に表示します
- 1〜6のような小さな範囲から、20桁を超える巨大な整数まで対応しています
- 乱数のしくみのやさしい解説・Excel/Googleスプレッドシート/Python用のコピペ数式・計算ドリル(演習問題)もこのページにまとまっています
この計算は何の役に立つ?
応募者や生徒に番号を振って乱数で選べば、誰の意図も入らない公平な選び方になります。全員が同じ確率で選ばれること(一様分布)が、数学的に保証された「くじ引き」です。
宝くじのロト6が「1〜43から6個・重複なし」という形なのもまさにこの形式で、選び方は約610万通り(6,096,454通り)あります。
「日本人全員に聞かずに、なぜ数千人の調査で世論がわかるのか」——その土台が、対象者を乱数で選ぶ無作為抽出です。作為的に選ぶと結果が偏るため、乱数選びが調査の信頼性を支えます。
報道機関の世論調査で使われるRDD方式は、電話番号そのものを乱数で作って掛ける方法で、電話帳に載っていない人にも等しく当たるように工夫されています。
複雑すぎて式では解けない問題でも、乱数で何万回も試行して結果を集計すれば、答えに近い値が得られます。これをモンテカルロ法といい、金融機関のリスク計算、気象のアンサンブル予報(条件を少しずつ変えた予測計算を何通りも行う天気予報の手法)、物理や医療の研究まで幅広く使われています。
「乱数の平均は期待値に近づく」という、このページで学ぶ性質がその理論的な土台です。
デジタルゲームの中の偶然——サイコロの出目、カードのシャッフル、ガチャの抽選、マップの自動生成——は、すべて疑似乱数で作られています。
「シードが同じなら同じ列が再現される」という疑似乱数の性質は、リプレイ機能や「同じシード値のマップを友達と共有して遊ぶ」といった仕組みに、むしろ積極的に活用されています。
ネット通販の暗号通信も、ワンタイムパスワードも、「攻撃者に予測できない数」=乱数がなければ成り立ちません。
ここでは予測されうる普通の疑似乱数は使えないため、暗号論的に強化された生成器や、熱雑音などの物理現象から作るハードウェア乱数が使われます。「乱数の品質」が世の中の安全を左右する、一番シビアな応用例です。
式
用語・記号の解説
記号
| \(a\) | エー | 乱数の範囲の下限(この数以上)。(例:1〜100の乱数なら \(a = 1\)) |
| \(b\) | ビー | 乱数の範囲の上限(この数以下)。(例:1〜100の乱数なら \(b = 100\)) |
| \(P(X=k)\) | ピー・エックスイコールケー | 乱数 \(X\) がちょうど整数 \(k\) になる確率。整数の一様乱数ではどの \(k\) でも同じ値になります。 |
| \(f(x)\) | エフエックス(確率密度) | 小数の乱数の「出やすさ」を表すグラフの高さ(確率密度関数)。一様分布では範囲内のどこでも同じ高さです。 |
| \(E[X]\) | イーエックス(期待値) | 乱数 \(X\) をたくさん生成したときに平均が近づいていく値。Eは期待値を意味する英語 Expectation の頭文字です。 |
| \(u\) | ユー | 0以上1未満の一様な乱数。コンピュータの乱数の多くは、まずこの形で作られてから欲しい範囲に変換されます。 |
| \(\lfloor\ \rfloor\) | ゆか(床関数) | 中の数の小数点以下を切り捨てて整数にする記号。(例:\(\lfloor 3.2 \rfloor = 3\)) |
| \(X_n\) | エックス・エヌ | 疑似乱数の列の \(n\) 番目の値。最初の値 \(X_0\) がシード(種)です。 |
| \(\bmod\) | モッド | 割った余りを取る計算。(例:\(38 \bmod 16 = 6\) となります。38を16で割ると2余り6) |
用語
| 乱数 | らんすう | サイコロの出目のように、次に何が出るか予測できるパターンのない数のこと。このページの生成器は、指定した範囲からでたらめに選ばれた数を作ります。 |
| 一様分布 | いちようぶんぷ | 範囲内のどの値も同じ程度に出やすい分布。整数の乱数なら「どの整数も同じ確率」、小数の乱数なら「グラフの高さがどこでも同じ」になります。 |
| 疑似乱数 | ぎじらんすう | 計算式で作られる「乱数のように見える」数の列。英語では PRNG(Pseudo Random Number Generator=疑似乱数生成器)と呼びます。コンピュータの乱数は、ほぼすべてこの疑似乱数です。 |
| シード | しーど(種) | 疑似乱数の計算を始めるときの最初の値。同じシードから始めると、まったく同じ乱数の列が再現されます。普段は時刻などから自動で決められるので、毎回違う列に見えます。 |
| 線形合同法 | せんけいごうどうほう | 「掛けて、足して、余りを取る」をくり返す、疑似乱数の一番古典的な作り方。しくみの学習には最適ですが、現在の実用ではより高品質な方式(メルセンヌ・ツイスタなど)が主流です。 |
| ハードウェア乱数 | はーどうぇあらんすう | サイコロやコイン、大気の電気的ノイズ、電子回路の熱雑音のような物理現象から作る乱数。計算式によらないため再現できず、「真の乱数」に近いものが得られます。 |
| 期待値 | きたいち | 確率的に出る値を「たくさんくり返したときの平均」。一様乱数の期待値は範囲のちょうど真ん中です。 |
| 無作為抽出 | むさくいちゅうしゅつ | 調査の対象を、人の意図を入れず乱数などでランダムに選ぶこと。統計調査で偏りを避けるための基本の方法で、ランダムサンプリングとも呼ばれます。 |
前提として理解しておくといいこと
このページの計算を「意味がわかって」使えるようになるために、前提として理解しておくといいことをまとめました。
| 余りのある割り算(小学3〜4年) |
|
| 小数と切り捨て(小学4〜5年) |
|
| 割合・百分率(小学5年) |
|
| 確率の基礎(中学2年) |
|
| 期待値(高校 数学A) |
|
Excelで計算する方法
| 下限 a | 1 |
| 上限 b | 6 |
| 各整数が出る確率 | =1/(B2-B1+1) |
| 下限 a | 0 |
| 上限 b | 10 |
| 確率密度(グラフの高さ) | =1/(B2-B1) |
| 下限 a | 1 |
| 上限 b | 100 |
| 乱数の平均(期待値) | =(B1+B2)/2 |
| 下限 a | 1 |
| 上限 b | 100 |
| 整数の乱数(再計算のたびに変わる) | =B1+INT(RAND()*(B2-B1+1)) |
| 今の乱数 Xn | 7 |
| 掛ける数 a | 5 |
| 足す数 c | 3 |
| 割る数 m | 16 |
| 次の乱数 | =MOD(B2*B1+B3,B4) |
1つ目の表なら約0.1667(=1/6)、3つ目の表なら50.5、5つ目の表なら6と表示されます。
4つ目の表のRAND()は「0以上1未満の乱数」を作る関数で、「式」の章の変換式そのままの形です。F9キーを押すたびに新しい乱数が出ます。
なお、整数の乱数にはExcel専用の関数 =RANDBETWEEN(B1,B2) もあり、同じ結果が1つの関数で得られます。
Googleスプレッドシートで計算する方法
| 下限 a | 1 |
| 上限 b | 6 |
| 各整数が出る確率 | =1/(B2-B1+1) |
| 下限 a | 0 |
| 上限 b | 10 |
| 確率密度(グラフの高さ) | =1/(B2-B1) |
| 下限 a | 1 |
| 上限 b | 100 |
| 乱数の平均(期待値) | =(B1+B2)/2 |
| 下限 a | 1 |
| 上限 b | 100 |
| 整数の乱数(再計算のたびに変わる) | =B1+INT(RAND()*(B2-B1+1)) |
| 今の乱数 Xn | 7 |
| 掛ける数 a | 5 |
| 足す数 c | 3 |
| 割る数 m | 16 |
| 次の乱数 | =MOD(B2*B1+B3,B4) |
表を丸ごとコピーしてA1セルに貼り付け、入力欄の数値を自分の値に書き換えてください。
Pythonで計算する方法
import random
lower = 1 # 下限
upper = 100 # 上限
count = 5 # 生成する個数
# 整数の乱数(重複あり)
integers = [random.randint(lower, upper) for _ in range(count)]
# 整数の乱数(重複なし)
unique_integers = random.sample(range(lower, upper + 1), count)
# 小数の乱数
decimals = [random.uniform(lower, upper) for _ in range(count)]
print(f"整数の乱数(重複あり): {integers}")
print(f"整数の乱数(重複なし): {unique_integers}")
print(f"小数の乱数: {decimals}")
# シードを決めると、何度実行しても同じ列が再現される(疑似乱数の性質)
random.seed(42)
print(f"シード42の乱数: {[random.randint(1, 100) for _ in range(3)]}")
数式記述言語(LaTeX等)での書き方(コピペ可)
P(X = k) = 1 / (b − a + 1)
P(X = k) = \frac{1}{b - a + 1}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>P</mi><mo>(</mo><mi>X</mi><mo>=</mo><mi>k</mi><mo>)</mo>
<mo>=</mo>
<mfrac>
<mn>1</mn>
<mrow><mi>b</mi><mo>−</mo><mi>a</mi><mo>+</mo><mn>1</mn></mrow>
</mfrac>
</mrow>
</math>
P(X = k) = 1/(b - a + 1)
1/(b - a + 1)
p := 1/(b - a + 1);
p = 1/(b - a + 1);
P(X = k) = 1/(b - a + 1)
f(x) = 1 / (b − a)
f(x) = \frac{1}{b - a}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo>
<mo>=</mo>
<mfrac>
<mn>1</mn>
<mrow><mi>b</mi><mo>−</mo><mi>a</mi></mrow>
</mfrac>
</mrow>
</math>
f(x) = 1/(b - a)
1/(b - a)
f := 1/(b - a);
f = 1/(b - a);
f(x) = 1/(b - a)
E[X] = (a + b) / 2
E[X] = \frac{a + b}{2}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>E</mi><mo>[</mo><mi>X</mi><mo>]</mo>
<mo>=</mo>
<mfrac>
<mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow>
<mn>2</mn>
</mfrac>
</mrow>
</math>
E[X] = (a + b)/2
(a + b)/2
mean := (a + b)/2;
mean_x = (a + b)/2;
E[X] = (a + b)/2
n = a + ⌊u × (b − a + 1)⌋
n = a + \lfloor u \times (b - a + 1) \rfloor
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>n</mi>
<mo>=</mo>
<mi>a</mi>
<mo>+</mo>
<mo>⌊</mo>
<mi>u</mi>
<mo>×</mo>
<mo>(</mo><mi>b</mi><mo>−</mo><mi>a</mi><mo>+</mo><mn>1</mn><mo>)</mo>
<mo>⌋</mo>
</mrow>
</math>
n = a + |__ u xx (b - a + 1) __|
a + Floor[u*(b - a + 1)]
n := a + floor(u*(b - a + 1));
n = a + floor(u*(b - a + 1));
n = a + ⌊u × (b - a + 1)⌋
Xₙ₊₁ = (a·Xₙ + c) mod m
X_{n+1} = (a X_n + c) \bmod m
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub><mi>X</mi><mrow><mi>n</mi><mo>+</mo><mn>1</mn></mrow></msub>
<mo>=</mo>
<mo>(</mo>
<mi>a</mi><msub><mi>X</mi><mi>n</mi></msub>
<mo>+</mo><mi>c</mi>
<mo>)</mo>
<mo>mod</mo>
<mi>m</mi>
</mrow>
</math>
X_(n+1) = (a X_n + c) mod m
Mod[a*x + c, m]
X[n + 1] := (a*X[n] + c) mod m;
x_next = mod(a*x + c, m);
X_(n+1) = (a X_n + c) mod m
ChatGPT に聞いて計算してもらう方法
あなたは乱数生成のアシスタントです。次の作業を、必ずPythonコードを実際に実行して行い、実行結果の数値だけを根拠に回答してください(乱数はコードを実行しないと作れません。推測や創作で数字を書かないでください)。 1. 1〜100の整数の乱数を5個、重複なしで生成してください。 2. その5個を昇順に並べ替えてください。 3. 0.2〜112.5の範囲の小数の乱数を1個、小数点以下3桁で生成してください。 使ったコードと、実行結果の数値を示してください。
計算ドリル(演習問題)
このページの式を、自分の手で計算できるようになるための演習問題です。
答えと解説は解答ページにあります。
使い方
-
1数値を入力計算したい数値を入力欄に入力します
-
2計算「計算する」ボタンを押します
-
3結果を確認計算結果がその場に表示されます。計算の考え方や式の解説も同じページで確認できます
DataChefの特徴
専門知識不要、直感的で簡単な操作
個人情報を登録することなく使用できます
「ダウンロード」押下でファイルを自動削除
クレジット表記不要
商用利用許諾の連絡も不要です
