共用方式為


mersenne_twister Class

由 Mersenne 反轉搜尋演算法產生隨機序列。 保留為 TR1 相容性。 請改用 mersenne_twister_engine Class

template<class UIntType,
   int W, int N, int M, int R,
   UIntType A, int U, int S,
   UIntType B, int T, UIntType C, int L>
   class mersenne_twister {
public:
   typedef mersenne_twister<UIntType, W, N, M, R,
      P, U, S, B, T, C, L> _MyT;
   typedef UIntType result_type;
   static const int word_size = W;
   static const int state_size = N;
   static const int shift_size = M;
   static const int mask_bits = R;
   static const int UIntType parameter_a = A;
   static const int output_u = U;
   static const int output_s = S;
   static const UIntType output_b = B;
   static const int output_t = T;
   static const UIntType output_c = C;
   static const int output_l = L;
   static const UIntType default_seed = 5489U;
   explicit mersenne_twister(unsigned long x0 = default_seed);
   mersenne_twister(const mersenne_twister& right);
   mersenne_twister(mersenne_twister& right);
   template<class Gen>
      mersenne_twister(Gen& gen);
   void seed(unsigned long x0 = default_seed);
   template<class Gen>
      void seed(Gen& gen);
   result_type min() const;
   result_type max() const;
   result_type operator()();
   };

參數

  • UIntType
    不帶正負號的整數結果型別。

  • W
    W 引擎的參數。

  • N
    N 引擎的參數。

  • R
    R 引擎的參數。

  • A
    A 引擎的參數。

  • U
    U 引擎的參數。

  • S
    S 引擎的參數。

  • B
    B 引擎的參數。

  • T
    T 引擎的參數。

  • C
    C 引擎的參數。

  • L
    L 引擎的參數。

備註

樣板類別說明簡單的引擎。 範例中會顯示與 W * (N - 1) + R 位元的大整數值。 它會擷取 W 來源位元這麼大的值,如此一來,當,它使用了所有位元會藉由將和混合位元反轉較大的值,使其具有捕捉動作的一組新的來源位元。 引擎的狀態是最後一個 NW-位元值,用於 operator() 呼叫至少 N 時間,則為 MW-使用的位元值和種子的最後一個 N - M 值。

樣板引數 UIntType 必須夠大保留的值。 2W - 1決策。 其他樣板引數的值必須符合下列需求:

0 < M <= N

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

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

W * (N - 1) + R 必須是 Mersenne 初始

產生器反轉它會藉由執行下列程式碼顯示較大的值:

    for (int i = 0; i < N; ++i)
        {
        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 (int 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);
    temp = temp ^ ((temp << S) & B);
    temp = temp ^ ((temp << T) & C);
    temp = temp ^ (temp >> L);

當 idx 到達 N 時產生器會反轉所儲存的值並將 idx 設為 0。

需求

標題: <random>

命名空間: std

請參閱

參考

<random>

mersenne_twister::mersenne_twister

mersenne_twister::operator()

mersenne_twister::seed