我正在使用 rand() 创建随机数。当我运行我的代码时:
int lowest=10000, highest=90000000000;
int range=(highest-lowest)+1;
for (int index=1; index<2; index++){
c = lowest+int(range*rand()/(RAND_MAX + 1.0));
C 作为正数和负数返回。为什么会这样,我该如何解决?
我正在使用 rand() 创建随机数。当我运行我的代码时:
int lowest=10000, highest=90000000000;
int range=(highest-lowest)+1;
for (int index=1; index<2; index++){
c = lowest+int(range*rand()/(RAND_MAX + 1.0));
C 作为正数和负数返回。为什么会这样,我该如何解决?
这是因为range * rand()
溢出和缠绕。
这种方法不能“固定”,因为你只会得到可能RAND_MAX
的range
值,留下永远不会选择的大洞。(或者,如果(INT_MAX - INT_MIN + 1) / (RAND_MAX + 1)
小于RAND_MAX
,这就是您可以获得的不同结果的数量)
使用新的 C++11 随机数生成器。
如果您不能使用 C++11,则使用位移位和 OR 运算符将多个rand()
结果组合成一个数字。如果您的号码超出您的范围,请再试一次。将一个范围映射到另一个范围的任何方法都会破坏伪随机数的大部分优良属性,例如均匀分布。