3

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

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

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

4

2 回答 2

4

所有的伪随机生成器都力求每比特产生高度的不可预测性。在观察到 624 个值之前,目前无法从 mersene twisters 中预测其程度远远优于随机机会。

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

于 2013-09-14T22:46:56.407 回答
0

不。

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

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

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

于 2017-04-16T17:26:09.340 回答