在Linux中生成相同的数字,但在Windows中生成相同的数字

在Linux中生成相同的数字,但在Windows中生成相同的数字,第1张

在Linux中生成相同的数字,但在Windows中生成相同的数字

这是怎么回事:

  • 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]范围内的整数的方式本质上是这样的:生成一个number
    n
    。如果该数字不大于2147483600,则返回
    (n - 1) / 21474836 + 1
    ; 否则,请尝试使用新号码。

很容易看出,在大多数情况下,

n
在此过程中,两个仅相差16807的s在[1,100]中将产生相同的数字。实际上,人们希望生成的数字大约每21474836/16807
= 1278秒或21.3分钟增加1,这与您的观察非常吻合。

MSVC

default_random_engine
mt19937
,没有这个问题。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5018830.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存