>웹 프론트엔드 >JS 튜토리얼 >JavaScript에서 일관된 난수 생성기를 만드는 방법은 무엇입니까?

JavaScript에서 일관된 난수 생성기를 만드는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-04 09:26:02601검색

How to Create a Consistent Random Number Generator in JavaScript?

시드 가능한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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