有一个名为Uncommon Maths的Java库声称提供比Sun和(可能)更好的随机数生成器甚至是BouncyCastle.如何确定他们的图书馆是否可以信任?我相信Sun和BouncyCastle,因为很多重要的公司都在使用他们的东西.目前尚不清楚Uncommon Maths是否属于同一类别.有任何想法吗?
好问题 ;)
所有RNG算法都是由比我自己聪明的人发明的众所周知的算法.我是程序员,不是数学家.我刚刚移植了原始的C代码.所以你必须希望我没有在转换中引入任何错误.
与大多数开源软件一样,没有任何担保.如果你想用它进行模拟,我认为这是一个非常好的选择.如果你想用它来加密,那么像Fortuna这样的东西会更好.
Uncommons Maths并不像某些库那样广泛使用.它每周下载5到20次.我不知道有多少人真正继续在严肃的应用程序中使用它.我将它用于进化计算以及我一直在玩的一些与扑克相关的微不足道的程序.
我在每个RNG实现上都运行了Diehard,并没有强调任何缺陷.也就是说,Diehard的结果并不是最容易解释的:
因此,对于0或1附近的偶然p值,例如.0012或.9983,您不应该感到惊讶.当比特流确实失败时
s of 0 or 1 to six or more places. By all means, do not, as a Statistician might, think that a p < .025 or p> .975 means that the RNG has "failed the test at the .05 level". Such p
,即使有良好的RNG ,你也会在DIEHARD产生的数百个中发生.所以请记住"p发生".
Uncommons Maths RNGs都满足这种成功的模糊定义.在0.025 ... 0.975范围之外有一个或两个p值,但没有"失败大".这与使用Java的SecureRandom获得的结果相当(并且优于java.util.Random,它确实"失败大").
如果您想自己测试一下,分发中有一个名为DiehardInputGenerator的类.这将生成运行Diehard所需的12mb文件.