当最小值和最大值为正时,Rand()返回负数

时间:2013-07-14 23:55:01

标签: 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返回正数和负数。为什么会这样,我该如何解决?

1 个答案:

答案 0 :(得分:5)

这是因为range * rand()溢出并缠绕着。

这种方法无法“修复”,因为你只会获得RAND_MAXrange可能的值,留下永远无法选择的大洞。 (或者,如果(INT_MAX - INT_MIN + 1) / (RAND_MAX + 1)小于RAND_MAX,那么您可以获得多少不同的结果)

使用新的C ++ 11随机数生成器。

如果你不能使用C ++ 11,那么使用bitshifting和OR运算符将多个rand()结果组合成一个数字。如果您的数字超出范围,请再试一次。将一个范围映射到另一个范围的任何方法都会破坏伪随机数的大部分优良属性,如均匀分布。