我观察到该rand()库函数在循环中仅被调用一次时,几乎总是产生正数。
for (i = 0; i < 100; i++) {
printf("%d\n", rand());
}
但是,当我添加两个rand()呼叫时,现在生成的数字将具有更多的负数。
for (i = 0; i < 100; i++) {
printf("%d = %d\n", rand(), (rand() + rand()));
}
有人可以解释为什么我在第二种情况下看到负数吗?
PS:我在循环之前将种子初始化为srand(time(NULL))。
RAND_MAX您的编译器?您通常可以在中找到它stdlib.h。(有趣:检查man 3 rand,它带有单行描述“坏随机数生成器”。)
abs(rand()+rand())。我宁愿拥有一个积极的UB,也不愿拥有一个消极的UB!;)
rand()不能为负...