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