我观察到该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()
不能为负...