我发现多个引用说Java.Random PRNG将在2 ^ 48个数字出现问题之后回滚。有没有人用代码对它进行了实际测试并确定它何时结束?
由于
答案 0 :(得分:8)
嗯,Java Random
是LCG,有48位种子。这在documentation:
该类使用48位种子,使用线性同余公式进行修改。 (参见Donald Knuth,“计算机程序设计的艺术”,第2卷,第3.2.1节。)
无需测试。 LCG的非常很好理解。 Knuth实际上在TAOCP第2卷中做得非常好(这是他所有书中最可读的材料)。
已知Java中LCG的乘数为25214903917,我们非常了解 生成器。 Java所做的是将LCG的输出的第16位到第47位产生32位输出。这样做是因为已知低阶位的周期比高阶位短。