【问题标题】:Is Mersenne Twister a good binary RNG?Mersenne Twister 是一个好的二进制 RNG 吗?
【发布时间】:2012-02-01 23:54:17
【问题描述】:

我正在尝试找到一个 RNG 来生成伪随机位流。我发现 Mersenne Twister (MT19937) 是一种广泛使用的 RNG,可以生成良好的 32 位无符号整数,并且已经完成实现以生成明显良好的双精度浮点数(生成 53 位整数)。但我似乎没有找到任何关于它在某些方面表现良好的参考。

Marsaglia 表达了对 Mersenne Twister 随机性的一些担忧,这让我怀疑使用它。

有人知道 Mersenne Twister 是否有用于生成伪随机位的显着偏差吗?如果是这样,有没有人知道一个好的伪随机位生成器?

【问题讨论】:

  • 如果没有播种或抓取数字等外部资源,这可能没问题。它的计算速度也非常快,这是一个奖励。我工作过的公司一直在使用它,所以也有你的认可。你为什么担心它的随机性?
  • IIRC,它不应该用于统计/高安全性的东西,但对于大多数用途来说足够快且相当随机。 (虽然,显然有 better PRNGs 更快,根据维基百科文章... IIRC。)它的初始值更接近 0,但经过一堆迭代后,它是相当随机的。
  • @muntoo MWC 对位有偏见,所以我不能使用它。
  • @MitchWheat 对于蒙特卡洛来说,什么是好的 RNG?
  • 我想修改我的评论:梅森捻线机不适合加密目的,但适合蒙特卡洛。

标签: random mersenne-twister


【解决方案1】:

所有的伪随机生成器都力求在每个比特上生成高度的不可预测性。在观察到 624 个值之前,目前没有办法预测 mersene twisters 的程度远远优于随机概率。

所有“X RNG 好吗”形式的问题都必须回答:“你用它做什么?”由于其出色的频率分布,Meresene Twister 在模拟方面取得了巨大成功。 在加密情况下,它完全没有任何价值。内部状态可以通过查看任何 624 个连续输出来识别。 Blum Blum Shub 在加密情况下非常强大,但在模拟中运行速度慢得令人无法接受。

【讨论】:

    【解决方案2】:

    没有。

    没有人应该选择 Mersenne Twister 来生成随机性,除非它是内置的,如果您广泛使用随机性,则无论如何都应该替换它。 Mersenne Twister 未能通过基本的统计随机性测试,而更简单、更快的算法则无法通过,而且通常有点令人失望。

    我现在推荐的不安全的非加密伪随机数生成器是xoroshiro+PCG family。 xoroshiro+ 速度更快,据称质量稍高,但 PCG 系列提供了更完整的库并承担了更多角色。

    但是,现代加密随机性可以变得足够快。 Rust 的 rand 库默认使用 ISAAC,还有其他选择。 除了最特殊的情况外,这应该是您的默认选择。

    【讨论】:

      猜你喜欢
      • 2012-01-13
      • 2014-02-22
      • 2014-04-17
      • 2020-05-22
      • 1970-01-01
      • 2017-04-01
      • 2020-01-10
      • 2013-10-13
      • 2010-12-19
      相关资源
      最近更新 更多