random_mersenne_twister_engine

random_mersenne_twister_engine (메르센 트위스터 엔진)

std::mersenne_twister_engine은 메르센 트위스터 알고리즘에 기반한 난수 엔진이에요. [0, 2^w) 구간에서 고품질이지만 암호학적으로 안전하지 않은 UIntType 부호 없는 정수 난수를 생성해요. C++11부터 사용할 수 있어요.

출처: cppreference

본문

<random> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.

template<
    class UIntType, std::size_t w, std::size_t n, std::size_t m, std::size_t r,
    UIntType a, std::size_t u, UIntType d, std::size_t s,
    UIntType b, std::size_t t, UIntType c, std::size_t l, UIntType f
> class mersenne_twister_engine;

(since C++11)

mersenne_twister_engine은 메르센 트위스터 알고리즘에 기반한 난수 엔진이에요. [0, 2^w) 구간에서 고품질이지만 암호학적으로 안전하지 않은 UIntType 부호 없는 정수 난수를 생성해요.

템플릿 매개변수 (Template parameters)

  • UIntType — 결과 타입. unsigned short, unsigned int, unsigned long, unsigned long long 중 하나가 아니면 효과는 정의되지 않아요.
  • w — 엔진이 생성하는 값의 범위를 결정하는 2의 거듭제곱
  • n — 반복 차수(degree of recurrence)
  • m — 중간 단어(middle word), 상태를 정의하는 반복 관계에 쓰이는 오프셋
  • r — 하위 비트마스크의 비트 수, 트위스트 값이라고도 함
  • a — 조건부 xor-마스크, 즉 유리 정규형 트위스트 행렬의 계수
  • u, d, s, b, t, c, l — 비트 스크램블링(tempering) 행렬의 1~7번째 성분
  • f — 초기화 승수

다음 제약 중 하나라도 위반되면 프로그램은 ill-formed예요: 0 < m ≤ n, 2 < w, r ≤ w, u ≤ w, s ≤ w, t ≤ w, l ≤ w, w ≤ std::numeric_limits::digits.

멤버 함수 (Member functions)

  • (constructor) — 엔진 생성
  • seed — 상태 설정
  • 생성: operator() — 다음 난수 생성; discard — 상태 진행
  • 특성: min [static] — 가장 작은 생성 값; max [static] — 가장 큰 생성 값

미리 정의된 생성기 (Predefined)

std::mt19937std::mt19937_64가 이 엔진의 파라미터화된 인스턴스예요.

더 알아보기 (Learn more)

cppreference