다음을 통해 공유


mersenne_twister_engine Class

Mersenne 회오리 알고리즘으로 난수 시퀀스를 생성합니다.

template<class UIntType,
   size_t W, size_t N, size_t M, size_t R,
   UIntType A, size_t U,
   UIntType D, size_t S,
   UIntType B, size_t T,
   UIntType C, size_t L
   UIntType F>
class mersenne_twister_engine {
public:
   typedef UIntType result_type;
   static const size_t word_size = W;
   static const size_t state_size = N;
   static const size_t shift_size = M;
   static const size_t mask_bits = R;
   static const UIntType xor_mask = A;
   static const size_t tempering_u = U;
   static const size_t tempering_d = D;
   static const size_t tempering_s = S;
   static const UIntType tempering_b = B;
   static const size_t tempering_t = T;
   static const UIntType tempering_c = C;
   static const size_t tempering_l = L;
   static const UIntType initialization_multiplier = C;
   static const result_type default_seed = 5489U;
   explicit mersenne_twister_engine(unsigned long x0 = default_seed);
   explicit mersenne_twister_engine(seed_seq& seq);
   void seed(unsigned long x0 = default_seed);
   template<class Gen>
      void seed(seed_seq& seq);
   result_type min() const;
   result_type max() const;
   result_type operator()();
   void discard(unsigned long long count)();
   };

매개 변수

  • UIntType
    부호 없는 정수 결과 형식입니다.

  • W
    W 엔진 매개 변수입니다.

  • N
    N 개의 엔진 매개 변수입니다.

  • M
    M 엔진 매개 변수입니다.

  • R
    R 엔진의 매개 변수입니다.

  • A
    A 엔진 매개 변수입니다.

  • U
    U 엔진 매개 변수입니다.

  • D
    D 엔진 매개 변수입니다.

  • S
    S 엔진 매개 변수입니다.

  • B
    B 엔진 매개 변수입니다.

  • T
    T 엔진 매개 변수입니다.

  • C
    C 엔진 매개 변수입니다.

  • L
    L 엔진 매개 변수입니다.

  • F
    F 엔진 매개 변수입니다.

설명

이 템플릿 클래스 더불어는 <random>.큰 정수 계열 값을 보유 하 고 W * (N - 1) + R 비트입니다.추출한 W 이미지가 자유롭게이 큰 값 및 모든 비트를 사용 하면 한 번에 비트로 비틀리 큰 값으로 이동 하 고 새 집합을 추출 하는 비트를 가질 수 있도록 모든 비트 혼합 합니다.엔진의 상태는 마지막으로 NW-비트 값을 사용 하는 경우 operator() 최소한 호출 된 N 항상 그렇지는 MW-비트 사용 된 값과 마지막 N - M 값의 시드.

템플릿 인수 UIntType 최대 값을 보유할 수 있을 정도로 커야 합니다 2W - 1.템플릿 인수 값은 다음 요구 사항을 충족 해야 합니다.

1 < M <= N

0 <= R, U, S, T, L <= W

0 <= A, B, C <= 2W - 1

W * (N - 1) + RMersenne 소수 여야 합니다.

생성자에 다음 코드를 실행 하 여 영희 큰 값 이미지가 자유롭게 비틀리:

    for (size_t i = 0; i < N; ++i)
        {    // twist
        temp = (x[i] & LMASK) << (W - 1) | (x[i + 1] & HMASK) >> 1;
        if (temp & 1)
            y[i] = (temp >> 1) ^ A ^ x[(i + R) % N];
        else
            y[i] = (temp >> 1) ^ x[(i + R) % N];
        }
        for (size_t i = 0; i < N; ++i)
            x[i] = y[i];

위치 LMASK 되는 부호 없는 W-비트의 낮은 값 R 비트가 설정 1과 나머지 비트가 0으로 설정 하 고 HMASK 의 보수입니다 LMASK.

생성자는 현재 인덱스가 들어 idx 0으로 초기화 합니다.다음 코드를 실행 하 여 비트를 추출 합니다.

    temp = x[idx++];
    temp = temp ^ ((temp >> U) & D);
    temp = temp ^ ((temp << S) & B);
    temp = temp ^ ((temp << T) & C);
    temp = temp ^ (temp >> L);

때 idx 에 도달 N 생성자에 저장 된 값은 이미지가 자유롭게 비틀리 고 설정 idx 0으로 다시.

요구 사항

헤더: <random>

네임 스페이스: std

참고 항목

참조

<random>

mersenne_twister_engine::discard

mersenne_twister_engine::mersenne_twister_engine

mersenne_twister_engine::operator()

mersenne_twister_engine::seed