6

http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#setSeed(long)を参照してください。コードは、mod 2^48 を減らす前に乗数でシードを xor します。渡されたシード mod 2^48 を減らさないのはなぜですか? C の同等のシード 48 は xor を実行しません。

4

1 に答える 1

3

ここで見つけることができる素晴らしい読み物:java.util.Randomのマジックナンバー0x5DEECE66D

と引用:

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

そして、このドキュメントはマジックナンバーにもショットを与えます。

そしてもう1つの引用:

次に、Javaを除く10進値を検索してみたところ、いくつかのクラスノートで答えが見つかりました。

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.
于 2013-01-10T17:59:52.323 に答える