Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does the Java implementation of Random.setSeed xor the parameter with 0x5DEECE66DL?

Tags:

java

random

See http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#setSeed(long). The code xors seed with the multiplier before reducing it mod 2^48. Why not just reduce the passed seed mod 2^48? The C equivalent seed48 does not perform the xor.

like image 988
Eric Brunstad Avatar asked Jan 10 '13 17:01

Eric Brunstad


1 Answers

A nice read you can find here : java.util.Random’s Magic Number 0x5DEECE66D.

and a quote:

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

And this Document gives a shot at the Magic number too.

and One more Quote:

I then tried a search for the decimal value, excluding Java, and found the answer in some class notes:

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.
like image 189
Frank Avatar answered Oct 14 '22 02:10

Frank