这是怎么回事:
default_random_engine
在libstdc ++(GCC的标准库)中minstd_rand0
,是,这是一个简单的线性同余引擎:typedef linear_congruential_engine<uint_fast32_t, 16807, 0, 2147483647> minstd_rand0;
该引擎生成随机数的方式是x i + 1 =(16807x i + 0)mod 2147483647。
因此,如果种子相差1,则大多数情况下,第一个生成的数字通常相差16807。
该生成器的范围是[1,2147483646]。libstdc ++
uniform_int_distribution
将其映射到[1,100]范围内的整数的方式本质上是这样的:生成一个numbern
。如果该数字不大于2147483600,则返回(n - 1) / 21474836 + 1
; 否则,请尝试使用新号码。
很容易看出,在大多数情况下,
n在此过程中,两个仅相差16807的s在[1,100]中将产生相同的数字。实际上,人们希望生成的数字大约每21474836/16807
= 1278秒或21.3分钟增加1,这与您的观察非常吻合。
MSVC
default_random_engine是
mt19937,没有这个问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)