乱数
Random Number
概要(サマリー)
乱数とは、実行するたびに予測しにくい値を得るために、一定の仕組みで生成される数のことである。サイコロを振るような感覚で、ゲーム、抽選、表示順のシャッフル、テストデータ作成などに使われる。
詳細解説
コンピュータの乱数
一般的なプログラムが作る乱数の多くは、アルゴリズムで計算した疑似乱数である。完全に偶然な値ではないが、通常のゲームや表示の変化には十分な予測しにくさを持つ。
JavaScriptで乱数を作る
Math.random()は0以上1未満の数を返す。
const dice = Math.floor(Math.random() * 6) + 1;
console.log(dice);
この例では1から6までの整数を作り、サイコロの目として使っている。
こうした乱数の動きは、実際の抽選系ツールを触ってみると体感しやすい。
範囲と偏りを考える
乱数を整数へ変換するときは、最小値と最大値を正しく設計する必要がある。丸め方が不適切だと端の数字だけ出にくくなるなど、意図しない偏りが生まれる。
同じ結果を再現したい場面
テストやシミュレーションでは、毎回違う結果より同じ乱数列を再現できるほうが便利な場合がある。そのときはseed(種)を指定できる乱数生成器を使う。seedが同じなら、同じ手順で同じ値を得やすい。
セキュリティ用途は別に考える
パスワード、認証トークン、秘密のURLなどには、通常の疑似乱数関数を安易に使ってはいけない。セキュリティ用途では、予測耐性を持つ暗号学的に安全な乱数生成機能を選ぶ必要がある。
AIコーディングとの関係
AIには「1から100までの整数」「同じ値の重複を許さない抽選」のように範囲と条件を伝えるとよい。認証に関係する値なら「暗号学的に安全な方法を使う」と明示し、生成されたコードが通常の乱数関数を使っていないか確認する必要がある。
よくある勘違い
疑似乱数は偽物で使えない?
ゲームやシャッフルなど多くの用途では十分に使える。用途に合う品質かどうかが重要である。
Math.random()でパスワードを作ってよい?
適切ではない。秘密情報には暗号学的に安全な乱数生成機能を使うべきである。
乱数ならすべての値が均等に出る?
生成方法や整数への変換方法が悪いと偏りが生じる。範囲の計算を確認する必要がある。
まとめ
- 乱数は予測しにくい値を作るために使う
- 一般的な乱数の多くはアルゴリズムによる疑似乱数である
- 範囲、丸め方、重複条件を正しく設計する
- セキュリティ用途では専用の安全な乱数生成機能を使う
情報ソース
より詳しくAIに聞いてみよう
- 疑似乱数の仕組みを初心者向けに説明してください。
- 1から6までの乱数を作る計算を説明してください。
- seedを使う理由を教えてください。
- 偏りの少ない抽選コードを書いてください。
- 安全な乱数が必要な場面と実装方法を教えてください。