Namespaces
Variants

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

From cppreference.net
mersenne_twister_engine ( ) : mersenne_twister_engine ( default_seed ) { }
(1) (C++11부터)
explicit mersenne_twister_engine ( result_type value ) ;
(2) (C++11부터)
template < class SeedSeq >
explicit mersenne_twister_engine ( SeedSeq & seq ) ;
(3) (C++11부터)
mersenne_twister_engine ( const mersenne_twister_engine & other ) ;
(4) (C++11부터)
(암시적으로 선언됨)

의사 난수 엔진을 생성합니다.

1) 기본 생성자.
  • 기본 생성된 엔진이 std::mt19937 타입인 경우, 이를 10000회 연속 호출했을 때 생성되는 값은 4123659995 입니다.
  • 기본 생성된 엔진이 std::mt19937_64 타입인 경우, 이를 10000회 연속 호출했을 때 생성되는 값은 9981545732273789042 입니다.
2) 시드 값 value 로 엔진을 생성합니다. 2 w
p 로 할 때, 엔진의 초기 상태 는 다음과 같이 결정됩니다:
  1. X -n value % p 로 설정합니다.
  2. 정수 i [ i - n , - 1 ] 범위에 있을 때, X i [f·(X i-1 xor (X i-1 rshift (w-2)))+i mod n] mod p 로 설정합니다. 여기서 xor rshift 는 각각 내장 비트 XOR 비트 우측 시프트 를 의미합니다.
3) 시드 시퀀스 seq 로 엔진을 생성합니다. std:: size_t ( w / 32 ) + 1 k 로 주어졌을 때, 엔진의 초기 상태 는 다음과 같이 결정됩니다:
  1. 길이 n * k 의 가상 배열 객체 a 를 생성합니다.
  2. seq. generate ( a + 0 , a + n * k ) 를 호출합니다.
  3. [ - n , - 1 ] 범위의 각 정수 i 에 대해, X i (∑ k-1
    j=0
    a k(i+n)+j ·2 32j
    ) mod 2 w
    로 설정합니다.
  4. 만약 X -n 의 최상위 w − r 비트가 0이고, 다른 모든 결과적인 X i 0 라면, X -n 2 w-1
    로 변경합니다.
이 오버로드는 다음 조건에서만 오버로드 해결에 참여합니다: SeedSeq SeedSequence 요구 사항을 충족하는 경우에만.
4) 복사 생성자. 생성 시, * this == other true 입니다.

목차

매개변수

value - 내부 상태 초기화에 사용할 시드 값
seq - 내부 상태 초기화에 사용할 시드 시퀀스

복잡도

1,2) O(n) .
3) seq.generate 호출의 복잡도와 동일합니다.
4) O(n) .

예외

3) 만약 SeedSeq std::seed_seq 가 아닌 경우, seq.generate 호출에서 발생하는 예외를 던집니다.

예제

#include <cassert>
#include <random>
int main()
{
    std::mt19937 gen32; // overload (1)
    std::mt19937_64 gen64; // overload (1)
    gen32.discard(10000 - 1);
    gen64.discard(10000 - 1);
    assert(gen32() == 4123659995);
    assert(gen64() == 9981545732273789042ull);
}

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2181 C++11 오버로드 ( 3 ) seq.generate 호출이 예외를 발생시켜도 예외를 발생시키지 않음 예외를 전파함
P0935R0 C++11 기본 생성자가 explicit였음 implicit로 변경됨

참고 항목

엔진의 현재 상태를 설정합니다
(public member function)