ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で反復可能な乱数を生成するにはどうすればよいですか?

JavaScript で反復可能な乱数を生成するにはどうすればよいですか?

DDD
リリース: 2024-12-11 09:31:09
オリジナル
310 人が閲覧しました

How Can I Generate Repeatable Random Numbers in JavaScript?

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

概要:

JavaScript の Math.random( ) 関数はランダム性を提供しますが、シードは許可しません。これは、関数が呼び出されるたびに、新しい数値シーケンスが生成されることを意味します。これは、反復可能なランダム シーケンスが必要な状況では問題になる可能性があります。

シード可能な擬似乱数ジェネレーター:

Math.random() にはシード機能がないため、外部の擬似乱数ジェネレーターを実装する必要があります。 (PRNG) シード機能を提供します。 PRNG は高品質の乱数を提供し、1 つ以上のシード値による初期化を可能にします。

シードの初期化:

PRNG では、ランダム性を確保するために適切な初期化が必要です。適切に分散された高エントロピーのシード値は、堅牢なランダム性にとって非常に重要です。 cyrb128 などのハッシュ関数は、短い文字列から適切なシードを生成できます。あるいは、ダミー データを複数のジェネレータ反復によるパディングとして使用して、初期状態を徹底的に混合することもできます。

パフォーマンスに関する考慮事項:

JavaScript 数値は最大 53 ビットのみをサポートします。整数全体の解像度とビット単位の演算の 32 ビット解像度。最近の PRNG は 64 ビット操作を使用することが多いですが、JS の実装には shim が必要であり、パフォーマンスが大幅に低下する可能性があります。提示された PRNG アルゴリズムは、JavaScript で最適なパフォーマンスを得るために 32 ビット操作を優先します。

推奨 PRNG:

sfc32 (Simple Fast Counter)

sfc32 は、優れた 128 ビットの内部状態を持つ高速 PRNG です。 JavaScriptで。これは優れたランダム性の品質を示し、PractRand 乱数テスト スイートでよく使用されます。

使用例:

function sfc32(a, b, c, d) {
  return function() {
    // State update logic
    ...
    return (t >>> 0) / 4294967296;  // Convert to floating-point number in the range [0, 1)
  };
}

const seedgen = () => (Math.random() * 2 ** 32) >>> 0;
const getRand = sfc32(seedgen(), seedgen(), seedgen(), seedgen());
ログイン後にコピー

この例では単純なシード生成が使用されていることに注意してください。デモンストレーションを目的としたメソッド。実際には、より堅牢なシード生成メカニズムを採用する必要があります。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート