为什么Random.setSeed的Java实现xor参数为0x5DEECE66DL?

时间:2013-01-10 17:54:34

标签: java random

http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#setSeed(long)。代码xors种子与乘数之前减少它mod 2 ^ 48。为什么不减少传递的种子mod 2 ^ 48? C等效种子48不执行xor。

1 个答案:

答案 0 :(得分:3)

你可以在这里找到一个很好的读物:java.util.Random’s Magic Number 0x5DEECE66D

和引用:

The analysis says it was chosen simply because researchers determined empirically 
that it produces a sequence of values satisfying various randomness tests

这个Document也给了魔术数字。

还有一个引用:

  

然后我尝试搜索十进制值,不包括Java,然后找到   一些课堂笔记中的答案:

http://nut.bu.edu/~youssef/py502/monte_carlo_supplement.ps     http://www.inf.ethz.ch/personal/gaertner/texts/own_work/random_matrices.pdf

and in some computer documentation:

http://developer.apple.com/documentation/Darwin/Reference/ManPages/html/_rand48.3.html

The Youssef notes say:

... I can only say that 25214903917_LONG and 11_LONG have
apparently been chosen by passing a battery of such [meaning
Marsaglia's DIEHARD] tests.

... Even in the case of the 48-bit generators we are discussing
today, cas26 will generate them all in a month or two of CPU time
and then start to repeat.