为什么这段代码会生成均匀分布的数字?我理解它有一些困难。有人可以解释一下吗?谢谢。
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 就可以了。