このコードが一様分布の数値を生成するのはなぜですか?私はそれを理解するのにいくつかの困難があります。誰かが説明できますか?ありがとう。
int RandomUniform(int n) {
int top = ((((RAND_MAX - n) + 1) / n) * n - 1) + n;
int r;
do {
r = rand();
} while (r > top);
return (r % n);
}
更新:rand()%nが均一に分散されたシーケンスを提供しない理由を理解しています。私の質問はなぜ
top = ((((RAND_MAX - n) + 1) / n) * n - 1) + n;
ここでの懸念は何ですか?単純なtop=RAND_MAX / n*nで十分だと思います。