JavaScript 난수 생성기에 대한 사용자 정의 시드 제공
기본 JavaScript Math.random() 함수는 [0 범위 내에서 임의의 값을 생성합니다. , 1]이지만 사용자 정의 시드를 설정할 수는 없습니다. 결과적으로 생성된 난수 시퀀스는 반복 불가능합니다.
사용자 정의 가능한 시드가 있는 JavaScript 난수 생성기를 생성하려면 다음과 같은 여러 옵션을 탐색할 수 있습니다.
Math.random( ) 도우미 함수:
사용자 정의 시드가 필요하지 않은 경우 도우미 함수와 함께 Math.random()을 활용하여 반복 가능한 값 범위(예: randRange(start, end))를 생성할 수 있습니다. .
의사 난수 생성기(PRNG):
무작위성을 더 잘 제어하려면 Mersenne Twister와 같은 PRNG를 사용하는 것이 좋습니다. 그러나 구현이 복잡합니다. 대안은 구현하기가 더 쉽고 적절한 무작위성을 제공하는 선형 합동 생성기(LCG)입니다.
LCG 구현(Short Seedable 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!