시드 가능한 JavaScript 난수 생성기 만들기
JavaScript의 Math.random() 함수는 자동으로 0과 1 사이의 난수를 제공합니다. 현재 시간을 기준으로 초기화됩니다. 그러나 반복 가능한 의사 난수 시퀀스를 생성하려면 사용자 정의 시드 값을 허용하는 난수 생성기가 필요합니다.
해결책:
구현 시드 가능한 난수 생성기에는 시드를 지원하는 적절한 PRNG(의사 난수 생성기) 알고리즘을 선택하는 작업이 포함됩니다. 널리 사용되는 옵션 중 하나는 뛰어난 무작위성과 긴 주기로 유명한 Mersenne Twister 알고리즘입니다.
그러나 Mersenne Twister를 구현하는 것은 복잡할 수 있습니다. 초보자의 경우 선형 합동 생성기(LCG)와 같은 대안을 권장합니다. LCG는 Mersenne Twister만큼 강력하지는 않지만 구현이 간단하고 적절한 무작위성을 제공합니다.
LCG 구현(RNG 클래스)
다음 스니펫은 LCG를 보여줍니다. GCC 상수를 사용하여 JavaScript로 구현:
<code class="javascript">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; }</code>
사용:
원하는 시드 값을 사용하여 RNG 클래스의 인스턴스 생성:
<code class="javascript">var rng = new RNG(20);</code>
임의의 정수에 액세스:
<code class="javascript">for (var i = 0; i < 10; i++) console.log(rng.nextInt());</code>
임의의 부동 소수점 숫자(0~1) 생성:
<code class="javascript">for (var i = 0; i < 10; i++) console.log(rng.nextFloat());</code>
지정된 범위 내에서 임의의 값 생성:
<code class="javascript">for (var i = 0; i < 10; i++) console.log(rng.nextRange(10, 50)); // Random integers between 10 (inclusive) and 50 (exclusive)</code>
배열에서 임의의 요소 선택:
<code class="javascript">var digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; for (var i = 0; i < 10; i++) console.log(rng.choice(digits)); // Random digits from the array</code>
위 내용은 JavaScript에서 일관된 난수 생성기를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!