需要帮助了解更好的RNG

时间:2013-09-03 07:57:47

标签: c++ random

在这篇文章的最后一个例子中(http://www.daniweb.com/software-development/cpp/threads/1769/c-random-numbers),作者声称这是一种生成随机数的更好方法。但是,我读到了这一行,并且仍然对于尝试做什么感到困惑。

random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));

我测试了这段代码,但它每次都会产生“1”的值。

我希望有人可以提供澄清。

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_MAXrand()返回的最大值,rand() / (MAX_RAND + 1.0)位于[0, 1)。因此,r * rand() / (MAX_RAND + 1.0)位于[0, r)