지정된 범위[최소, 최대] 내에서 균일하게 난수를 생성하는 방법을 찾고 있습니다.
rand의 결함
rand() 및 모듈러스 연산자는 동작이 RAND_MAX 및 범위 자체에 따라 달라지므로 균일한 분포를 보장하지 못할 수 있습니다.
C 11 및 균일 범위 생성
C 11에서 std: :uniform_int_distribution은 이에 맞는 솔루션을 제공합니다. 필요 사항:
#include <random> std::uniform_int_distribution<int> distr(min, max); std::random_device rand_dev; std::mt19937 generator(rand_dev()); int random_number = distr(generator);
컨테이너 셔플링
컨테이너를 섞으려면 다음을 사용하세요. std::shuffle:
#include <random> #include <vector> std::vector<int> vec = {4, 8, 15, 16, 23, 42}; std::random_device random_dev; std::mt19937 generator(random_dev()); std::shuffle(vec.begin(), vec.end(), generator);
Boost.Random
C 11 컴파일러를 사용할 수 없는 경우 다음과 유사한 인터페이스를 제공하는 Boost.Random을 고려하세요. C 11 대응
위 내용은 C의 특정 범위 내에서 균일하게 분포된 난수를 어떻게 생성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!