Mersenne Twister是一个很好的二元RNG吗?

时间:2012-01-04 00:56:13

标签: random mersenne-twister

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

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

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

2 个答案:

答案 0 :(得分:4)

所有psudorandom发电机都力求每位产生高度的不可预测性。目前没有办法预测mersene twisters的一点,其程度远远大于随机机会,直到你观察到624个值。

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

答案 1 :(得分:0)

没有

没有人应该选择Mersenne Twister来产生随机性,除非它是内置的,如果你广泛使用随机性,你应该更换它。 Mersenne Twister失败的基本统计随机性测试更简单,更快的算法没有,并且通常只是有点令人失望。

我现在推荐的不安全的非加密伪随机数生成器是xoroshiro+PCG family。 xoroshiro +速度更快,据称质量略高,但PCG系列带有更完整的库,可以填充更多角色。

但是,现代加密随机性可以获得足够快的速度。 Rust的rand库默认使用ISAAC,并且存在其他选择。 除了最常见的情况外,这应该是您的默认选择。

相关问题