ホームページ > 記事 > ウェブフロントエンド > JavaScript で反復可能な乱数シーケンスを作成するにはどうすればよいですか?
JavaScript 乱数ジェネレーターのカスタム シードの提供
デフォルトの JavaScript Math.random() 関数は、[0] の範囲内のランダムな値を生成します。 , 1] ですが、カスタム シードを設定することはできません。したがって、生成された乱数のシーケンスは反復不可能です。
カスタマイズ可能なシードを使用して JavaScript 乱数ジェネレーターを作成するには、複数のオプションを検討できます。
Math.random( ) ヘルパー関数:
カスタム シードが必要ない場合は、ヘルパー関数で Math.random() を利用して、反復可能な値の範囲 (例: randRange(start, end)) を作成できます。 .
擬似乱数ジェネレーター (PRNG):
ランダム性をさらに制御するには、メルセンヌ ツイスターのような PRNG の使用を検討してください。ただし、その実装は複雑です。代替手段は線形合同ジェネレータ (LCG) です。これは実装が簡単で、適切なランダム性を提供します。
LCG 実装 (ショート シード可能 RNG):
以下はLCG を使用した短いシード可能 RNG の実装例:
<code class="js">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; }; RNG.prototype.nextFloat = function() { // returns in range [0,1] return this.nextInt() / (this.m - 1); }; RNG.prototype.nextRange = function(start, end) { // returns in range [start, end): including start, excluding end // can't modulu nextInt because of weak randomness in lower bits var rangeSize = end - start; var randomUnder1 = this.nextInt() / this.m; return start + Math.floor(randomUnder1 * rangeSize); }; RNG.prototype.choice = function(array) { return array[this.nextRange(0, array.length)]; };</code>
RNG を使用するには:
<code class="js">var rng = new RNG(20); for (var i = 0; i < 10; i++) console.log(rng.nextRange(10, 50)); var digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; for (var i = 0; i < 10; i++) console.log(rng.choice(digits));</code>
以上がJavaScript で反復可能な乱数シーケンスを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。