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

hic*_*123 1 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));
Run Code Online (Sandbox Code Playgroud)

C作为正数和负数返回.为什么会这样,我该如何解决?

Ben*_*igt 5

这是因为range * rand()溢出和缠绕.

这种方法不能被"固定"的,因为你只得到RAND_MAX了的range可能值,留下永远不会选择大洞.(或者,如果(INT_MAX - INT_MIN + 1) / (RAND_MAX + 1)小于RAND_MAX,那么你可以得到多少不同的结果)

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

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