【发布时间】:2021-06-04 15:44:18
【问题描述】:
我为 128 位浮点运算编写了 Java class。在其他方法中,它有一种方法旨在生成[0, 1.0) 范围内的伪随机值。尽管我使用了我认为足够可靠的标准java.util.Random 类,但我从中构造 Quadruple 类的值的方式可能会出现错误。所以我想确保它返回的随机值足够随机。我已经使用 卡方 标准检查了 10_000 个子范围的幅度分布,并检查了尾数每个位位置中 1 的频率,并且我查看了十六进制用肉眼表示的数字,这就是我能想到的。到目前为止,一切看起来都很好。
但是这些测试并没有检查伪随机数的许多其他可能的缺陷(例如,尾数位之间可能存在的相关性,或者只是短序列值的重复)。有什么方法可以更仔细、更全面地测试这些数字的序列吗?如果它与问题相关,则此类数字的值在内部存储为尾数的 128 位(两个longs)和指数的 32 位。
【问题讨论】:
-
参考论文可能会有所帮助:security.stackexchange.com/a/83257。有PDF下载。
-
@Andy 谢谢,我会读的(如果对我来说不太科学的话)
-
它至少会为您提供全面的测试和描述列表。这将是一个很棒的 Java 库,可以根据其内容实现。该发行版似乎包括一个“c”实现。这是一个同样用 C 实现的 git 项目:github.com/greendow/A-variant-of-NIST-SP-800-22-test-suit
标签: java algorithm testing random