[C++] random

난수를 발생시키기 위해서는 아래 3가지가 필요하다.

  • 생성기
  • 엔진
  • 분포기
1. 생성기

난수 생성기는 std::random_device 를 사용한다. (이것밖에 없는듯)

2. 엔진

엔진은 여러가지가 있지만 주목해야 할것은 메르센 트위스터 엔진이다.

  • std::mt19937 = 32비트 메르센 트위스터 엔진.
  • std::mt19937_64 = 64비트 메르센 트위스터 엔진.
3. 분포기

일반적으로 사용하는 균등 분포에는 3가지가 있다.

4. 예시
#include<random>
int main() {
	std::random_device rd;     //생성기
	std::mt19937 gen(rd());    //엔진
	std::uniform_real_distribution<float> rand_real(0, 1);  //실수 분포기
	for (int i = 0; i < 10; i++) {
		std::cout << rand_real(gen) << std::endl;
	}
	std::uniform_int_distribution<int> rand_int(0, 100);    //정수 분포기
	for (int i = 0; i < 10; i++) {
		std::cout << rand_int(gen) << std::endl;
	}
}

만일 std::uniform_real_distribution 에서 [a,b] 를 (포함,포함) 으로 사용하고 싶다면

b 대신 b+아주작은수 를 넣어주면 된다.

0부터 1까지 뽑고싶다면 아래와 같이 하면 된다.

std::uniform_real_distribution<float> rand_real(0, 1+std::numeric_limits<float>::denorm_min());

C++ random 에 대한 자세한 내용은 https://msdn.microsoft.com/ko-kr/library/bb982398.aspx 에서 확인 할 수 있다.