>백엔드 개발 >C++ >`rand() % 14`가 균일하지 않은 결과를 생성하는 이유는 무엇입니까?

`rand() % 14`가 균일하지 않은 결과를 생성하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-03 05:46:09954검색

Why Does `rand() % 14` Produce Non-Uniform Results?

Rand() % 14가 균일하지 않은 값을 생성합니다

특정 범위 내에서 임의의 값을 생성하려고 시도할 때 일부 프로그래머는 다음과 같은 문제를 겪을 수 있습니다. rand() 함수를 사용할 때 비정상적인 동작이 발생합니다. 보고된 일반적인 문제 중 하나는 rand() % 14가 지속적으로 6 또는 13의 값을 반환한다는 것입니다.

이 현상을 이해하려면 rand()의 기본 알고리즘을 자세히 살펴보는 것이 중요합니다. Apple 컴퓨터에 사용되는 특정 구현은 MWC(Multiply-with-Carry) 생성기를 기반으로 합니다. 불행하게도 이 생성기의 약점은 7의 배수, 특히 승수 값이 16807이라는 것입니다.

결과적으로 srand() 초기화 직후 생성된 처음 몇 개의 난수의 하위 비트는 제한적입니다. 엔트로피. rand() % 14의 경우 하위 비트는 항상 동일한 값을 가지므로 6 또는 13의 두 가지 가능한 결과만 발생합니다.

이 문제를 완화하려면 간단한 해결책은 삭제하는 것입니다. 초기화 후 생성된 처음 몇 개의 난수입니다. 결과를 사용하지 않고 rand()를 몇 번 더 호출하면 알고리즘의 내부 상태가 더욱 혼란스러워지고 값의 균일한 분포가 복원됩니다.

위 내용은 `rand() % 14`가 균일하지 않은 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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