이론


선형 합동법보다 우수한 난수의 품질과 속도를 인정받아 C++11 부터는 mt19937 이 표준으로 채택

C++11 부터는 아래와 같은 코드로 메르센 트위스터를 이용한 난수생성이 가능하다.

메르센 트위스터는 발생시키는 난수의 비트 수에 따라 MT19937, MT19937-64로 나뉨.

  1. seed에서 624 크기의 MT 벡터를 생성
  2. MT 벡터를 이용하여 624개의 유사 난수 발생
  3. MT 벡터에 노이즈를 준 후(twist) 2번부터 반복

코드


#include <iostream>
#include <random>

int main(void)
{
    std::random_device random;                                //하드웨어 리소스를 기반으로 난수를 생성
    std::mt19937 engine(random());                            //메르센 트위스터 방식으로 난수를 생성하겠다는 선언
    std::uniform_int_distribution<int> distribution(0, 100);  //난수의 범위와 자료형 정의. rand() % 100과는 다르게 100도 나올 수 있음
    auto generated = distribution(engine);
    std::cout << generated << std::endl;
}