-1

TAOCP の 3 巻を調べてみると、短いランダム シーケンスのソースが見つかりません。

// Seed always in 1..0x10000
Seed = (Seed * const) % 0x10001

また、すべての 2^16 値が返されるように const を検証するためのアルゴリズムと、場合によっては MIX プログラムもありました。少なくともそれは私が覚えていることです。また、(2^16)+1 は素数であるが、残念ながら (2^32)+1 も (2^64)-1 も素数ではないため、上記の再帰が機能するという事実も同じ一般的な領域にありました。

FWIW、const を iconst = 1/const (mod 0x10001) に置き換えると、逆の順序でシーケンスが生成されます。すなわち const*iconst%0x10001 = 1

4

1 に答える 1

0

このアルゴリズムは、素数モジュラス乗法線形合同生成器 (PMMLCG - Law の「Simulation Modeling and Analysis, 5e」p.400 を参照) として知られる線形合同生成器 (LCG) の変形であり、レーマー生成器とも呼ばれます。私が提供した両方のリンクは、共通のパラメーター化を提供します。最初のリンクは、完全なサイクルを提供するパラメーターを選択するためのルールを提供します。ただし、完全なサイクルを持つことは、優れたジェネレーターを使用するための十分な条件ではありません。これは、IBM が現在悪名高いRANDUで壊滅的に発見したためです。

十分にテストされたアルゴリズムのみを使用することを強くお勧めします。これを正しく行うのは驚くほど困難です。よく研究され、すぐに利用できるアルゴリズムがあり、現在広く利用されており、どの LCG よりもはるかに優れています。

于 2014-06-30T16:00:51.983 に答える