栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在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
,没有这个问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/408730.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号