mersenne_twister_engine Class
Génère une séquence aléatoire par l'algorithme de tornade de 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)();
};
Paramètres
UIntType
Le type de résultat d'entier non signé.W
Le paramètre du moteur de W.N
Le paramètre du moteur N.M
Le paramètre du moteur de M.R
Le paramètre du moteur de R.A
Le paramètre du moteur d'Un.U
Le paramètre du moteur d'U.D
Le paramètre du moteur de D.S
Le paramètre du moteur de.B
Le paramètre du moteur de B.T
Le paramètre du moteur de T.C
Le paramètre du moteur C.L
L paramètre du moteur.F
Le paramètre du moteur de F.
Notes
Cette classe de modèle décrit <random>.Elle stocke une grande valeur intégrale avec les bits d' W * (N - 1) + R .Elle extrait les bits d' W à la fois de cette valeur élevée, et lorsqu'il a utilisé tous les bits il tord la grande valeur en déplaçant et en combinant les bits afin qu'elle dispose d'un nouvel ensemble de bits à récupérer à partir de.L'état du moteur est dernier NW- valeurs de bits utilisées si operator() a été appelé au moins les temps d' N , sinon MW- les valeurs de bits utilisées et les dernières valeurs d' N - M de la valeur de départ.
L'argument template UIntType doit être suffisamment grande pour contenir des valeurs jusqu'à 2W - 1.Les valeurs des autres arguments template doivent répondre aux exigences suivantes :
1 < M <= N
0 <= R, U, S, T, L <= W
0 <= A, B, C <= 2W - 1
W * (N - 1) + R doit être un nombre premier de Mersenne
Le concepteur tord la valeur élevée qu'il contient en exécutant le code suivant :
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];
où LMASK est Wnon signé (la valeur de bits avec ses bas bits d' R définis à 1 et le reste de ses bits définis à 0, et l' HMASK est le complément d' LMASK.
Le concepteur juge un index idx comme tableau initialisé à 0.Il récupère les bits en exécutant le code suivant :
temp = x[idx++];
temp = temp ^ ((temp >> U) & D);
temp = temp ^ ((temp << S) & B);
temp = temp ^ ((temp << T) & C);
temp = temp ^ (temp >> L);
Lorsque idx atteint N le concepteur tord la valeur stockée et définit idx à 0.
Configuration requise
en-tête : <random>
l'espace de noms : DST
Voir aussi
Référence
mersenne_twister_engine::discard
mersenne_twister_engine::mersenne_twister_engine