Java の Random クラスを使用した乱数の生成で奇妙なことを発見しました。基本的に、近いシード (たとえば 1 から 1000 の間) を使用して複数の Random オブジェクトを作成すると、各ジェネレーターによって生成される最初の値はほぼ同じになりますが、次の値は問題ないように見えます (さらに検索しませんでした)。
0 から 9 までのシードを持つ、最初に生成された 2 つの double を次に示します。
- 0 0.730967787376657 0.24053641567148587
- 1 0.7308781907032909 0.41008081149220166
- 2 0.7311469360199058 0.9014476240300544
- 3 0.731057369148862 0.07099203475193139
- 4 0.7306094602878371 0.9187140138555101
- 5 0.730519863614471 0.08825840967622589
- 6 0.7307886238322471 0.5796252073129174
- 7 0.7306990420600421 0.7491696031336331
- 8 0.7302511331990172 0.5968915822372118
- 9 0.7301615514268123 0.7664359929590888
そして 991 から 1000 まで:
- 991 0.7142160704801332 0.9453385235522973
- 992 0.7109015598097105 0.21848118381994108
- 993 0.7108119780375055 0.38802559454181795
- 994 0.7110807233541204 0.8793923921785096
- 995 0.7109911564830766 0.048936787999225295
- 996 0.7105432327208906 0.896658767102804
- 997 0.7104536509486856 0.0662031629235198
- 998 0.7107223962653005 0.5575699754613725
- 999 0.7106328293942568 0.7271143712820883
- 1000 0.7101849056320707 0.574836350385667
そして、これは 0 から 100,000 までのシードで生成された最初の値を示す図です。
シードに基づいて生成された最初のランダム double :
これに関する情報を検索しましたが、この正確な問題に言及しているものは何も見つかりませんでした。LCG アルゴリズムには多くの問題があることは知っていますが、これについては知りませんでした。これが既知の問題であるかどうか疑問に思っていました。
また、この問題が最初の値 (または最初のいくつかの値) のみで発生するのか、それともより一般的で近いシードを使用することを避けるべきなのかを知っていますか?
ありがとう。