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
멤버 함수 (Member functions)
- (constructor) — 엔진 생성
- seed — 상태 설정
- 생성: operator() — 다음 난수 생성; discard — 상태 진행
- 특성: min [static] — 가장 작은 생성 값; max [static] — 가장 큰 생성 값
미리 정의된 생성기 (Predefined)
std::mt19937과 std::mt19937_64가 이 엔진의 파라미터화된 인스턴스예요.