왜 새로운 난수 라이브러리가 rand()보다 나은가요?
rand()에 대한 현대적인 우려로 인해 우수한 난수 활용에 대한 논의가 촉발되었습니다. 기존 std::rand() 및 모듈로 접근 방식과 달리 엔진 배포 패러다임을 기반으로 한 생성(RNG) 절차입니다. rand()의 단점을 직접 이해하기 위해 빠른 실험이 수행되었습니다.
std::rand() 및 std를 활용하여 getRandNum_Old() 및 getRandNum_New()라는 두 가지 함수가 생성되었습니다. :mt19937은 각각 std::uniform_int_distribution을 사용하여 0과 5 사이의 난수를 생성합니다. 각 방법을 사용하여 960,000개의 난수를 생성하고 각 숫자(0-5)의 빈도를 기록했습니다. 표준편차는 측정항목으로 사용되었으며, 값이 낮을수록 분포가 더 균일함을 나타냅니다. 이 과정을 1000번 반복하고, 각 반복에 걸리는 시간을 측정했습니다.
놀랍게도 두 방법 모두 롤의 분포가 비슷했습니다. 새로운 방법은 약 4배 더 느렸습니다. 최소한의 품질 향상을 대가로 속도 향상이 이루어진 것으로 나타났습니다.
그러나 결정적인 차이점은 RNG 구현 자체에 있습니다. 많은 rand() 구현에서는 일반적으로 가장 강력하지 않은 LCG(선형 합동 생성기)를 사용합니다. 널리 퍼져 있음에도 불구하고 일반적으로 수행된 것과 같은 기본 테스트에서 허용 가능한 결과를 생성합니다.
표준 이하의 rand() 구현의 단점에는 하위 비트의 낮은 무작위성, 짧은 기간, 낮은 RAND_MAX 및 연속적인 비트 간의 상관 관계가 포함됩니다. 추출. 그러나 이러한 제한 사항은 rand() API에 고유한 것이 아니라는 점에 유의하는 것이 중요합니다.
rand()의 근본적인 문제는 다음 사항에 중점을 둡니다.
새로운
위 내용은 C의 ``라이브러리가 rand()보다 선호되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!