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