ジョシュが与えられた上限を持つ正の乱数を生成する欠陥のあるランダムメソッドの例ではn
、私は彼が述べている2つの欠陥を理解していません。
本の方法は次のとおりです。
private static final Random rnd = new Random();
//Common but deeply flawed
static int random(int n) {
return Math.abs(rnd.nextInt()) % n;
}
- 彼は、n が 2 の小さなべき乗である場合、生成される一連の乱数は短時間で繰り返されると述べています。これはなぜですか?のドキュメントに
Random.nextInt()
はReturns the next pseudorandom, uniformly distributed int value from this random number generator's sequence.
、 n が小さい整数の場合、シーケンスが繰り返されることはありませんが、なぜこれは 2 のべき乗にのみ適用されるのでしょうか? - 次に、n が 2 のべき乗でない場合、ある数値は他の数値よりも平均して頻繁に返されると彼は言います。
Random.nextInt()
均一に分散されたランダムな整数を生成する場合、なぜこれが発生するのですか? (彼はこれを明確に示すコードスニペットを提供していますが、なぜこれが当てはまるのか、これがnが2の累乗であることとどのように関連しているのかわかりません)。