【发布时间】:2019-06-28 00:49:54
【问题描述】:
以下randn 函数用于生成随机数,但我想知道它是如何工作的。那里的循环中发生了什么,它如何影响生成的随机值?
int rand2() {
return rand() & 1;
}
int randn(int N) {
int add = 0;
int ref = 1;
for (int i = 0; i < N; i++) {
add = add + rand2() * ref;
ref = ref * 2;
}
return add % N;
}
int main() {
srand(time(NULL));
printf("%d, ", randn(5));
return 0;
}
【问题讨论】:
-
它一次生成一位非常糟糕的随机数。避免它。
-
当然,但只是想知道它是如何工作的? :)
-
问:“它是如何工作的?” 答:不太好。使用
int randn(int N) { return rand() % N; }实际上你会得到更好的结果(和更少的代码)如果你想做正确的工作,检查你的系统是否提供了arc4random_uniform函数。 -
问题是我必须使用
rand2()函数作为randn()的唯一输入,这是一个面试问题 -
如何正确地完成第二部分,见pcg-random.org/posts/bounded-rands.html