最近我为 64 位integer
(或long
)实现了 MersenneTwister。是否有关于如何测试 PRNG 的指南或示例,以便我可以知道我的实现是否是足够好的解决方案。我对如何验证我的实现是否具有足够好的均匀分布特别感兴趣。
这与 MersenneTwister 相关的越具体越好。
您不需要测试 Mersenne Twister算法——那些真正知道他们在做什么的人已经一遍又一遍地完成了——你只需要测试你是否正确地实现了该算法。
您可以访问Mersenne Twister 网站并获取他们的测试输出。如果您产生与他们相同的输出序列,那么您可能已经正确实现了该算法。
请注意,MT 站点有一个专门针对64 位机器的链接以及针对 32 位和 64 位版本的不同测试输出。
PRNG 的标准测试组合是顽固测试。
最简单的方法(如果它是真正的通用 MT)是将其与具有相同种子的已知良好的 MT 库进行比较。
啊哈!
正如其他人所说 - 对算法使用已知的答案测试向量。如果您满足测试向量,您可以合理地确定您的生成器可以正常工作。
如果你真的想测试生成器。使用 Dieharder 工具实现的 DIEHARD 测试++: