"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C++의 특정 범위 내에서 균일하게 분포된 난수를 어떻게 생성할 수 있습니까?

C++의 특정 범위 내에서 균일하게 분포된 난수를 어떻게 생성할 수 있습니까?

2024년 12월 21일에 게시됨
검색:390

How Can I Generate Uniformly Distributed Random Numbers Within a Specific Range in C  ?

범위 전체에 걸쳐 균일한 난수 생성

지정된 범위 [최소, 최대] 내에서 균일하게 난수를 생성하는 방법을 찾고 있습니다.

rand의 결함

rand()와 모듈러스 연산자를 사용하는 현재 구현은 다음과 같이 균일한 분포를 보장하지 못할 수 있습니다. 동작은 RAND_MAX 및 범위 자체에 따라 다릅니다.

C 11 및 균일 범위 생성

C 11에서 std::uniform_int_distribution은 이러한 요구에 맞는 솔루션을 제공합니다.

#include 

std::uniform_int_distribution distr(min, max);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());

int random_number = distr(generator);

의 추가 기능

헤더는 다음과 같이 다양한 분포를 갖는 광범위한 난수 생성기 배열을 제공합니다. Bernoulli, Poisson 및 Normal과 같습니다.

컨테이너 섞기

컨테이너를 섞으려면 std::shuffle:

#include 
#include 

std::vector 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 컴파일러를 사용할 수 없는 경우 , C 11과 유사한 인터페이스를 제공하는 Boost.Random을 고려해보세요.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3