ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で乱数ジェネレーターをシードするにはどうすればよいですか?

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

Barbara Streisand
Barbara Streisandオリジナル
2024-12-03 06:24:14595ブラウズ

How Can I Seed Random Number Generators in JavaScript?

JavaScript での乱数ジェネレーターのシード

JavaScript の組み込み Math.random() には、乱数ジェネレーターをシードする機能がありません。乱数ジェネレータ。つまり、所定の乱数シーケンスを生成するために特定の値で初期化することはできません。 numbers.

Math.random() を使用してシードすることはできませんが、シード可能な疑似乱数を生成するためのカスタム関数を提供する外部ライブラリと実装があります。以下にいくつかのオプションを示します。

擬似乱数ジェネレータ (PRNG) 関数

いくつかのコンパクトで効率的な PRNG 関数を JavaScript で実装でき、高品質の乱数を提供します。 1 つ以上の 32 ビット数値をシードできます。

シード初期化

生成された数値のランダム性に影響を与える可能性のある低エントロピー シードを避けるために、PRNG を適切に初期化することが重要です。以下に 2 つの一般的な方法を示します。

  • ハッシュ関数: ハッシュ関数は短い文字列からシードを生成し、文字列をシードとして使用できるようにします。たとえば、cyrb128 ハッシュ関数は文字列から 128 ビットのハッシュ値を生成できます。
  • ダミー データ パディング: あるいは、シードにダミー データを埋め込み、ジェネレーターを進めることもできます。初期状態を数回よく混ぜます。

PRNGアルゴリズム

これは、128 ビット状態を持ち、0 ~ 1 の範囲の乱数を生成する sfc32 (Simple Fast Counter) アルゴリズムの例です。

function sfc32(a, b, c, d) {
  return function() {
    a |= 0; b |= 0; c |= 0; d |= 0;
    let t = (a + b | 0) + d | 0;
    d = d + 1 | 0;
    a = b ^ b >>> 9;
    b = c + (c << 3) | 0;
    c = (c << 21 | c >>> 11);
    c = c + t | 0;
    return (t >>> 0) / 4294967296;
  }
}

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

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