0

2^48 の数値が問題になった後、Java.Random PRNG がラップアラウンドするという複数の参照を見つけました。誰かが実際にコードでこれをテストし、いつラップアラウンドするかを判断しましたか?

ありがとう

4

1 に答える 1

8

JavaRandomは48 ビット シードのLCGです。これはドキュメントに記載されています:

このクラスは、線形合同式を使用して変更された 48 ビット シードを使用します。(Donald Knuth 著、The Art of Computer Programming、第 2 巻、セクション 3.2.1 を参照してください。)

テストする必要はありません。LCG は非常によく理解されています。実際、Knuth は TAOCP Volume 2 で非常にうまくレイアウトしています (これは彼のすべての本の中で最も読みやすい資料の一部です)。

Java での LCG の乗数は 25214903917 であることが知られており、その発生器をよく理解しています。Java は、その LCG の出力のビット 16 ~ 47 を使用して 32 ビット出力を生成します。これは、下位ビットの周期が上位ビットの周期よりも短いことがわかっているためです。

于 2013-08-06T18:11:53.853 に答える