シード可能な JavaScript 乱数ジェネレーターの実装
JavaScript で乱数のシーケンスを生成することは一般的な要件ですが、構築されたMath.random() 関数には、特定のシードを設定する機能がありません。これは、特定の数値シーケンスを再現したい場合や、決定論的なランダム性を作成したい場合に問題になる可能性があります。
カスタム乱数ジェネレーターの使用
この制限を克服するには、次のことができます。シード値を指定できるカスタム乱数ジェネレーターを実装します。線形合同生成器 (LCG) を使用した例を次に示します。
<code class="js">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>
この LCG は、0 から (2**31 - 1) までの整数のシーケンスを生成します。メルセンヌ ツイスターなどの他のタイプの乱数ジェネレータは、より強力なランダム性を保証しますが、実装がより複雑です。
シード値の設定
シード値を設定するにはこれを引数として RNG コンストラクターに渡すことができます。
<code class="js">var rng = new RNG(20);</code>
これにより、指定されたシードでジェネレーターの内部状態が初期化され、反復可能な一連の数値が生成されるようになります。
乱数ジェネレーターの使用
カスタム RNG は次のメソッドを提供します。
たとえば、10 から 50 までの乱数のシーケンスを生成するには、次のようにします。
<code class="js">for (var i = 0; i < 10; i++) console.log(rng.nextRange(10, 50));</code>
その他の考慮事項
以上がJavaScript でシード可能な乱数ジェネレーターを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。