> 웹 프론트엔드 > JS 튜토리얼 > JavaScript에서 반복 가능한 난수를 어떻게 생성할 수 있나요?

JavaScript에서 반복 가능한 난수를 어떻게 생성할 수 있나요?

DDD
풀어 주다: 2024-12-11 09:31:09
원래의
308명이 탐색했습니다.

How Can I Generate Repeatable Random Numbers in JavaScript?

JavaScript에서 난수 생성기 시드

소개:

JavaScript의 Math.random( ) 함수는 무작위성을 제공하지만 시딩을 허용하지 않습니다. 즉, 함수가 호출될 때마다 새로운 숫자 시퀀스가 ​​생성되는데, 이는 반복 가능한 무작위 시퀀스가 ​​필요한 상황에서 문제가 될 수 있습니다.

시드 가능한 의사 난수 생성기:

Math.random()에는 시드 기능이 부족하므로 다음을 제공하는 외부 PRNG(의사 난수 생성기)를 구현해야 합니다. 시딩 기능. PRNG는 고품질 난수를 제공하며 하나 이상의 시드 값으로 초기화할 수 있습니다.

시드 초기화:

PRNG는 무작위성을 보장하기 위해 적절한 초기화가 필요합니다. 잘 분산되어 있고 엔트로피가 높은 시드 값은 강력한 무작위성을 위해 중요합니다. cyrb128과 같은 해시 함수는 짧은 문자열에서 적합한 시드를 생성할 수 있습니다. 또는 초기 상태를 완전히 혼합하기 위해 여러 생성기 반복을 통해 더미 데이터를 패딩으로 사용할 수 있습니다.

성능 고려 사항:

JavaScript 숫자는 최대 53비트까지만 지원합니다. 정수에 대한 해상도와 비트 연산에 대한 32비트 해상도입니다. 최신 PRNG는 종종 64비트 작업을 사용하지만 JS 구현에는 shim이 필요하므로 성능이 크게 저하될 수 있습니다. 제시된 PRNG 알고리즘은 JavaScript에서 최적의 성능을 위해 32비트 작업의 우선 순위를 지정합니다.

권장 PRNG:

sfc32(Simple Fast Counter)

sfc32는 128비트 내부 메모리를 갖춘 빠른 ​​PRNG입니다. JavaScript에 뛰어난 상태입니다. 이는 우수한 무작위성 품질을 나타내며 PractRand 난수 테스트 모음에서 일반적으로 사용됩니다.

사용 예:

function sfc32(a, b, c, d) {
  return function() {
    // State update logic
    ...
    return (t >>> 0) / 4294967296;  // Convert to floating-point number in the range [0, 1)
  };
}

const seedgen = () => (Math.random() * 2 ** 32) >>> 0;
const getRand = sfc32(seedgen(), seedgen(), seedgen(), seedgen());
로그인 후 복사

예에서는 간단한 시드 생성을 사용합니다. 데모용 방법입니다. 실제로는 보다 강력한 시드 생성 메커니즘을 사용해야 합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿