可用的测试是:
Dieharder - http://www.phy.duke.edu/~rgb/General/dieharder.php
TestU01 - http://simul.iro.umontreal.ca/testu01/tu01.html
RaBiGeTe - http://cristianopi.altervista.org/RaBiGeTe_MT/
NIST STS - http://csrc.nist.gov/groups/ST/toolkit/rng/documentation_software.html
PractRand - http://pracrand.sourceforge.net/
其中任何一个都可以测试文件中的位.一些(PractRand,Dieharder,不确定TestU01)可以测试标准输入中的数据.有些还支持将PRNG直接链接到测试套件,动态(只有RaBiGeTe提供真正支持动态链接PRNG)或静态链接.
质量不平等.如果你有足够的PRNG输出,PractRand可以最快地找到最广泛的偏差(完全diclosure:我写了PractRand),然后是TestU01.如果你没有足够的位,RaBiGeTe可能会做得更好.NIST STS和Dieharder普遍表现不佳.
界面的便利性也不相同.PractRand和Dieharder用于命令行自动化.在我看来,PractRand和TestU01往往具有最容易解释的输出.在这方面,黛安德并不差.RaBiGeTe和NIST STS,嗯......它们都促进了我认为测试结果分布过于复杂和无用的可视化.
此外,NIST STS和Dieharder都存在误报问题.
还有耳鼻喉科,目前找不到它的链接...它有一个相当方便的界面IIRC但不是很擅长找到偏见.
如果您想自己测试RNG,有很多事情需要测试.以下是一些基本功能,可能会显示您的数字序列不是真正随机的,也可能与随机无法区分?
看一眼:
分发 - 您已经对您的分发做了一些分析.您希望每个可能的数字具有相同的发生概率.
循环行为 - 相同的序列会一遍又一遍地重复吗?重复序列可能很长.
重复的发生(... CBBAF F ...),三胞胎(...... CBAAA F ...)等. 在一系列随机数中,你有一定的dulplicates概率(连续两次生成相同的数字) ),三胞胎等.计算这个概率并检查你的伪随机数序列是否具有相同的重复概率?
请注意,对于大多数这些测试,您需要具有相当长的随机数序列,以便能够从统计分析中获得合理且准确的结果.
我假设peudo随机数整数序列,可以通过将[0,1]数乘以适当的常数来轻松修复.