>  기사  >  웹 프론트엔드  >  JavaScript에서 시드 가능한 난수 생성기를 어떻게 만듭니까?

JavaScript에서 시드 가능한 난수 생성기를 어떻게 만듭니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-04 08:48:30785검색

How do I create a seedable random number generator in JavaScript?

시드 가능한 JavaScript 난수 생성기 구현

JavaScript에서 일련의 난수를 생성하는 것은 일반적인 요구 사항이지만 내장된 Math.random() 함수에는 특정 시드를 설정하는 기능이 없습니다. 이는 특정 숫자 시퀀스를 재현하거나 결정론적 무작위성을 생성하려는 경우 문제가 될 수 있습니다.

사용자 정의 난수 생성기 사용

이 제한을 극복하려면 다음을 수행할 수 있습니다. 시드 값을 지정할 수 있는 맞춤형 난수 생성기를 구현합니다. 다음은 LCG(선형 합동 생성기)를 사용하는 예입니다.

<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;
}</code>

이 LCG는 0과 (2**31 - 1) 사이의 정수 시퀀스를 생성합니다. Mersenne Twister와 같은 다른 유형의 난수 생성기는 더 강력한 무작위성을 보장하지만 구현이 더 복잡합니다.

시드 값 설정

시드 값을 설정하려면 , 이를 RNG 생성자에 인수로 전달할 수 있습니다.

<code class="js">var rng = new RNG(20);</code>

이는 지정된 시드로 생성기의 내부 상태를 초기화하여 반복 가능한 숫자 시퀀스를 생성하도록 합니다.

난수 생성기 사용

사용자 정의 RNG는 다음 메서드를 제공합니다.

  • nextInt(): 0과 (2* 사이의 임의의 정수를 생성합니다. *31 - 1).
  • nextFloat(): 0과 1 사이의 임의의 부동 소수점 숫자를 생성합니다.
  • nextRange(start, end): 지정된 범위 내에서 임의의 숫자를 생성합니다( 포함 시작, 제외 끝).
  • choice(array): 배열에서 임의의 요소를 선택합니다.

예를 들어 10에서 50 사이의 난수 시퀀스를 생성하려면 다음을 수행합니다.

<code class="js">for (var i = 0; i < 10; i++)
  console.log(rng.nextRange(10, 50));</code>

추가 고려 사항

  • 선택한 RNG의 특성과 한계를 고려한 후 사용하세요.
  • RNG 주변의 도우미 기능을 사용하세요. RNG는 특정 범위 내의 숫자를 생성하기 위한 randRange(start, end)와 같이 사용법을 단순화합니다.
  • 자세한 내용과 사용 지침은 RNG 문서를 참조하세요.

위 내용은 JavaScript에서 시드 가능한 난수 생성기를 어떻게 만듭니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.