ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で一貫性のある乱数ジェネレーターを作成するには?

JavaScript で一貫性のある乱数ジェネレーターを作成するには?

DDD
DDDオリジナル
2024-11-04 09:26:02610ブラウズ

How to Create a Consistent Random Number Generator in JavaScript?

シード可能な 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 サイトの他の関連記事を参照してください。

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