爲什麼此代碼會生成均勻分佈的數字?我理解它有一些困難。有人可以解釋嗎?謝謝。均勻分佈的隨機數生成
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;
這裏有什麼關心?我認爲一個簡單的頂部= RAND_MAX/n * n會做。
你爲什麼認爲它確實生成一個統一的分佈? – Alnitak