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

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

DDD
DDDオリジナル
2024-11-29 17:35:12281ブラウズ

How Can I Seed the Random Number Generator in JavaScript?

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

概要:
JavaScript の組み込み乱数ジェネレーター、 Math.random() は、明示的にシードしたり操作したりすることはできません。ただし、外部関数を使用してシード機能を提供し、特定の初期条件で高品質の乱数を生成することはできます。

答え:
Math.random() はシードできないままですが、いくつかの効率的で堅牢な疑似乱数ジェネレーター (PRNG) 関数が JavaScript に存在し、シードして優れた機能を提供します。

シードの初期化:
PRNG を適切に初期化するには、高エントロピー シードを利用することが重要です。効果的な方法の 1 つは、入力文字列から多様な 128 ビット ハッシュ値を生成できる cyrb128 のようなハッシュ関数を使用することです。あるいは、シードにダミー データを埋め込み、ジェネレータを進めることもできますが、初期状態の数は制限されます。

sfc32 (Simple Fast Counter) PRNG:
sfc32は、PractRand 乱数テスト スイートに合格した注目すべき PRNG です。 128 ビット状態で動作し、JavaScript で優れた速度を実現します。カスタム シード ジェネレーターで sfc32 を使用する例:

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;
  }
}

const seedgen = () => (Math.random() * 2 ** 32) >>> 0;
const getRand = sfc32(seedgen(), seedgen(), seedgen(), seedgen());
for (let i = 0; i < 10; i++) console.log(getRand());

これらの手法を利用すると、JavaScript 開発者はシード可能な PRNG の力を利用して、シミュレーションからゲーム開発に至るまで、さまざまなアプリケーション向けに高品質の乱数を生成できます。 .

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

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