シード可能な JavaScript 乱数ジェネレーターの作成
JavaScript の Math.random() 関数は、0 から 1 までの乱数を自動的に提供します。現在の時刻に基づいて初期化されます。ただし、ユーザー定義のシード値で反復可能な擬似乱数シーケンスを生成できる乱数ジェネレーターが必要です。
解決策:
実装シード可能な乱数ジェネレーターには、シードをサポートする適切な擬似乱数ジェネレーター (PRNG) アルゴリズムの選択が含まれます。人気のあるオプションの 1 つは、優れたランダム性と長い周期で知られるメルセンヌ ツイスター アルゴリズムです。
ただし、メルセンヌ ツイスターの実装は複雑になる可能性があります。初心者には、線形合同生成器 (LCG) などの代替手段をお勧めします。 LCG は実装が簡単で、メルセンヌ ツイスターほど強力ではありませんが、適切なランダム性を提供します。
LCG 実装 (RNG クラス)
次のスニペットは、LCG を示しています。 GCC の定数を使用した JavaScript での実装:
<code class="javascript">function RNG(seed) { this.m = 0x80000000; // 2**31; this.a = 1103515245; this.c = 12345; this.state = seed ? seed : Math.floor(Math.random() * (this.m - 1)); } RNG.prototype.nextInt = function() { this.state = (this.a * this.state + this.c) % this.m; return this.state; }</code>
使用法:
必要なシード値を使用して RNG クラスのインスタンスを作成します:
<code class="javascript">var rng = new RNG(20);</code>
ランダムな整数へのアクセス:
<code class="javascript">for (var i = 0; i < 10; i++) console.log(rng.nextInt());</code>
ランダムな浮動小数点数 (0 ~ 1) の生成:
<code class="javascript">for (var i = 0; i < 10; i++) console.log(rng.nextFloat());</code>
指定された範囲内のランダムな値の生成:
<code class="javascript">for (var i = 0; i < 10; i++) console.log(rng.nextRange(10, 50)); // Random integers between 10 (inclusive) and 50 (exclusive)</code>
配列からランダムな要素を選択します:
<code class="javascript">var digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; for (var i = 0; i < 10; i++) console.log(rng.choice(digits)); // Random digits from the array</code>
以上がJavaScript で一貫性のある乱数ジェネレーターを作成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。