ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript でシード可能な乱数ジェネレーターを作成するにはどうすればよいですか?

JavaScript でシード可能な乱数ジェネレーターを作成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-04 08:48:30782ブラウズ

How do I create a seedable random number generator in JavaScript?

シード可能な 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 は次のメソッドを提供します。

  • nextInt(): 0 から (2* までのランダムな整数を生成します) *31 - 1).
  • nextFloat(): 0 から 1 までのランダムな浮動小数点数を生成します。
  • nextRange(start, end): 指定された範囲内の乱数を生成します (
  • choice(array): 配列からランダムな要素を選択します。

たとえば、10 から 50 までの乱数のシーケンスを生成するには、次のようにします。

<code class="js">for (var i = 0; i < 10; i++)
  console.log(rng.nextRange(10, 50));</code>

その他の考慮事項

  • 選択した RNG を使用する前に、その特性と制限を考慮してください。
  • RNG を使用して、特定の範囲内の数値を生成する randRange(start, end) などの使用法を簡素化します。
  • 詳細と使用方法については、RNG のドキュメントを参照してください。

以上がJavaScript でシード可能な乱数ジェネレーターを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。