在这篇文章的最后一个例子中(http://www.daniweb.com/software-development/cpp/threads/1769/c-random-numbers),作者声称这是一种生成随机数的更好方法。但是,我读到了这一行,并且仍然对于尝试做什么感到困惑。
random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
我测试了这段代码,但它每次都会产生“1”的值。
我希望有人可以提供澄清。
答案 0 :(得分:1)
假设您要生成[a, b)
范围内的随机整数。这可以通过生成[0, b - a)
范围内的随机整数并添加a
:
random_integer = a + rand(0, b - a)
我们可以使用普通[0, RAND_MAX]
生成rand()
范围内的随机整数。现在,我们需要缩放此时间间隔以适合[0, r)
,r = b - a
。由于RAND_MAX
是rand()
返回的最大值,rand() / (MAX_RAND + 1.0)
位于[0, 1)
。因此,r * rand() / (MAX_RAND + 1.0)
位于[0, r)
。