在这篇文章的最后一个示例(http://www.daniweb.com/software-development/cpp/threads/1769/c-random-numbers)中,作者声称这是一种更好的生成随机数的方法。但是,我读了这一行,仍然对试图做什么感到困惑。
random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
我测试了这段代码,但它每次都会产生“1”的值。
我希望有人可以提供澄清。
在这篇文章的最后一个示例(http://www.daniweb.com/software-development/cpp/threads/1769/c-random-numbers)中,作者声称这是一种更好的生成随机数的方法。但是,我读了这一行,仍然对试图做什么感到困惑。
random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
我测试了这段代码,但它每次都会产生“1”的值。
我希望有人可以提供澄清。
假设您要在 range 中生成随机整数[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)
.