0

我发现多个参考资料说 Java.Random PRNG 将在 2^48 个数字出现问题后环绕。有没有人用代码实际测试过这个并确定它何时结束?

谢谢

4

1 回答 1

8

嗯,JavaRandom是具有 48 位种子的LCG 。这在文档中列出:

该类使用 48 位种子,该种子使用线性同余公式进行修改。(参见 Donald Knuth,计算机编程的艺术,第 2 卷,第 3.2.1 节。)

没有必要对其进行测试。LCG的很好理解。Knuth 实际上在 TAOCP 第 2 卷中很好地阐述了这一点(这是他所有书籍中可读性最高的材料之一)。

Java 中 LCG 的乘数已知为 25214903917,我们非常了解生成器。Java 所做的是需要 LCG 输出的第 16 位到第 47 位来产生 32 位输出。这样做是因为已知低位比高位具有更短的周期。

于 2013-08-06T18:11:53.853 回答