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