シードされた(疑似)乱数ジェネレーターの作成例を検索すると、次のようなものに出くわします(特定の例http://indiegamr.com/generate-repeatable-random-numbers-in-js/):
// the initial seed
Math.seed = 6;
// in order to work 'Math.seed' must NOT be undefined,
// so in any case, you HAVE to provide a Math.seed
Math.seededRandom = function(max, min) {
max = max || 1;
min = min || 0;
Math.seed = (Math.seed * 9301 + 49297) % 233280;
var rnd = Math.seed / 233280;
return min + rnd * (max - min);
}
これらの特定の番号(9301、49297、233280)とアルゴリズムは何度も使用されますが、これについての明確な参照を持つ人はいないようです。誰がこのアルゴリズムを発明し、ディストリビューションをテストしましたか?引用する紙や何かありますか?
5
これは線形合同ジェネレーターですが、かなり短い周期(32ビットintで許容されるのはわずか233kですが、40億周期を持っています
—
ラチェットフリーク
人々はしばしば本から直接コードをコピーするので、それはおそらくどこかで古い本からであり、何度かコピーされてきました。また、限定的なケースのようです。おそらく役立つ:heydari.persiangig.com/Ebooks/Applied_Crypto-Ch11-ch20.pdf/... ict.griffith.edu.au/anthony/info/C/RandomNumbers
—
barrycarter
@jlarsonコメントは十分な長さではありませんが、2つの問題があります。第1に、ラチェットフリークが言及したように、モジュロは最大周期です。ジェネレータが繰り返す前の一意の数です。実際の期間は短くなる場合があります。第2に、他の2つの数値(主に被乗数)は、より長い周期を確保するために、モジュロ数に対して比較的素数でなければなりません。理想的には、剰余数はデータ型に適合する最大の正の整数よりも小さい最大の素数であり、他の2つの数値も大きな素数です。
これはサイドディスカッションであり、実際の回答を追加することはこの質問には適切ではないため、これらの数値がひどい理由の短いバージョンです。プログラマーでは技術的に疑似乱数アルゴリズムも話題になっていますが、詳細についてはWikipediaやおそらく数学やコンピューターサイエンスを中心にバウンスすることをお勧めします。