有一个名为Uncommon Maths的Java库声称提供比Sun更好的随机数生成器,甚至可能是BouncyCastle。如何确定他们的图书馆是否可以信任?我相信Sun和BouncyCastle,因为很多重要的公司都在使用他们的东西。目前尚不清楚Uncommon Maths是否属于同一类别。有什么想法吗?
答案 0 :(得分:8)
好问题;)
所有RNG算法都是比我自己聪明的人发明的众所周知的算法。我是程序员,不是数学家。我刚刚移植了原始的C代码。所以你必须希望我没有在转换中引入任何错误。
与大多数开源软件一样,没有任何担保。如果你想用它进行模拟,我认为这是一个非常好的选择。如果你想将它用于加密,那么Fortuna之类的东西会更好。
Uncommons Maths并不像某些库那样广泛使用。它每周下载5到20次。我不知道有多少人真正继续在严肃的应用程序中使用它。我将它用于evolutionary computation和一些与我一直玩的一些琐碎的扑克相关程序。
我在每个RNG实施上运行了Diehard,并没有强调任何缺陷。也就是说,迪哈德的结果并不是最容易解释的:
因此你不应该感到惊讶 偶尔的p值接近0或1,例如 如.0012或.9983。当有点流 真的很失败,你会得到p
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
成百上千的 DIEHARD产生的,即使是好的 随机数发生器。所以请记住“p 发生”。
Uncommons Maths RNGs都满足这种模糊的成功定义。在0.025 ... 0.975范围之外有一个或两个p值,但没有“失败大”。这与使用Java的SecureRandom获得的结果相当(并且优于java.util.Random,它确实“失败大”)。
如果您想自己测试一下,分发版中会有一个名为DiehardInputGenerator的类。这将生成运行Diehard所需的12mb文件。
答案 1 :(得分:4)
不常见的数学声称通过了Diehard tests。这和我所知的一样可靠。
你可以随时成为一名科学家,并为自己重新进行这些测试作为独立检查。
答案 2 :(得分:0)
编写自己的测试。
可以使用chi-square test
对随机数生成器进行基本检查