Freigeben über


mersenne_twister_engine Class

Generiert eine zufällige Sequenz durch den Mersenne-Twisteralgorithmus.

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)();
   };

Parameter

  • UIntType
    Der vorzeichenlose Ergebnistyp ganze Zahl.

  • W
    Der W-Modulparameter.

  • N
    Der N-Modulparameter.

  • M
    Der M-Modulparameter.

  • R
    Der R-Modulparameter.

  • A
    Der a-Modulparameter.

  • U
    Der U-Modulparameter.

  • D
    Der D-Modulparameter.

  • S
    Der S-Modulparameter.

  • B
    Der B-Modulparameter.

  • T
    Der T-Modulparameter.

  • C
    Der C-Modulparameter.

  • L
    Der L-Modulparameter.

  • F
    Der F-Modulparameter.

Hinweise

Diese Vorlagenklasse beschreibt <random>.Sie enthält einen großen ganzzahliger Wert mit W * (N - 1) + R Bits an.Sie extrahiert W Bits gleichzeitig von diesem hohen Wert und wenn sie alle Bits verwendet wurde, es verzerrt großen Wert, indem sie die Bits verschieben und kombinieren, damit sie einen neuen Satz von hat zu extrahieren Bits.Der Zustand des Moduls ist die letzte NW- Bitwerte verwendet, wenn operator() mindestens N Zeiten aufgerufen wurde; andernfalls MW- Bitwerte, die verwendet wurden und die letzten N - M-Werte des Startwerts.

Das Vorlagenargument UIntType muss groß genug sein, Werte bis zu 2W - 1 aufzunehmen.Die Werte der anderen Vorlagenargumente müssen die folgenden Anforderungen erfüllen:

1 < M <= N

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

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

W * (N - 1) + R muss eine Mersenne-höchsteVollkommenheit sein

Der Generator verzerrt großen Wert, den er enthält, indem Sie den folgenden Code ausführt:

    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];

wobei LMASKW ohne Vorzeichen ist - Bitwert mit den grundlegenden R Bits, die auf 1 festgelegt sind und dem Rest der Bits, die auf 0 festgelegt werden, und HMASK ist die Ergänzen von LMASK.

Der Generator enthält einen aktuellen Index idx initialisiert bis 0 an.Er extrahiert Bits, indem er den folgenden Code ausführt:

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

Wenn idxN erreicht, verzerrt der Generator den gespeicherten Wert und legt idx zurück auf 0 fest.

Anforderungen

Header: <random>

Namespace: std

Siehe auch

Referenz

<random>

mersenne_twister_engine::discard

mersenne_twister_engine::mersenne_twister_engine

mersenne_twister_engine::operator()

mersenne_twister_engine::seed