mersenne_twister_engine, classe
Génère une séquence aléatoire d'entiers de haute qualité selon l'algorithme twister de Mersenne.
Syntaxe
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;
Paramètres
UIntType
Type des résultats entiers non signés. Pour les types possibles, consultez <aléatoire>.
W
Taille de mot. Taille de chaque mot, en bits, de la séquence d'état. Condition préalable : 2u < W ≤ numeric_limits<UIntType>::digits
N
Taille de l’état. Nombre d'éléments (valeurs) dans la séquence d'état.
M
Taille de décalage. Nombre d'éléments à ignorer pendant chaque torsion. Condition préalable : 0 < M ≤ N
R
Bits du masque. Condition préalable : R ≤ W
A
Masque XOR. Condition préalable : A ≤ (1u<<W) - 1u
U, S, T, L
Paramètres de décalage d’altération. Utilisés comme valeurs de décalage pendant le brouillage (altération). Condition préalable :U,S,T,L ≤ W
D, B, C
Paramètres de masque de bits d’altération. Utilisés comme valeurs de masque de bits pendant le brouillage (altération). Condition préalable :D,B,C ≤ (1u<<W) - 1u
F
Multiplicateur d’initialisation. Aide à l'initialisation de la séquence. Condition préalable :F ≤ (1u<<W) - 1u
Membres
mersenne_twister_engine::mersenne_twister_engine
mersenne_twister_engine::discard
mersenne_twister_engine::max
mersenne_twister_engine::min
mersenne_twister_engine::operator()
mersenne_twister_engine::seed
default_seed
est une constante membre, définie comme 5489u
, utilisée comme valeur de paramètre par défaut pour mersenne_twister_engine::seed
et le constructeur de valeur unique.
Pour plus d’informations sur les membres du moteur, consultez <aléatoire>.
Notes
Ce modèle de classe décrit un moteur de nombre aléatoire, retournant des valeurs sur l’intervalle fermé [ 0
,2
W1
- ]. Il contient une valeur intégrale élevée avec W * (N - 1) + R
bits. Il extrait les bits W à la fois de cette valeur importante, et quand il a utilisé tous les bits dont il a tord la grande valeur en déplaçant et en mélangeant les bits afin qu’il ait un nouvel ensemble de bits à extraire. L’état du moteur est les dernières N
W
valeurs -bit utilisées si operator()
elle a été appelée au moins N fois, sinon les M
W
valeurs -bit qui ont été utilisées et les dernières N - M
valeurs de la valeur initiale.
Le générateur tord la valeur importante qu’il contient à l’aide d’un registre de décalage de commentaires généralisé tordu défini par les valeurs de décalage N et M, une valeur de twist R et un masque XOR conditionnel A. En outre, les bits du registre de décalage brut sont brouillés (tempérés) selon une matrice de brouillage de bits définie par les valeurs U, D, S, B, T, C et L.
L’argument de modèle UIntType
doit être assez volumineux pour contenir des valeurs jusqu’à 2
W - 1
. Les valeurs des autres arguments de modèle doivent être conformes aux spécifications suivantes : 2u < W, 0 < M, M ≤ N, R ≤ W, U ≤ W, S ≤ W, T ≤ W, L ≤ W, W ≤ numeric_limits<UIntType>::digits, A ≤ (1u<<W) - 1u, B ≤ (1u<<W) - 1u, C ≤ (1u<<W) - 1u, D ≤ (1u<<W) - 1u, and F ≤ (1u<<W) - 1u
.
Bien que vous puissiez construire un générateur directement à partir de ce moteur, nous vous conseillons d’utiliser l’un des typedefs prédéfinis suivants :
mt19937
: moteur twister Mersenne 32 bits (Matsumoto et Nishimura, 1998).
typedef mersenne_twister_engine<unsigned int, 32, 624, 397,
31, 0x9908b0df,
11, 0xffffffff,
7, 0x9d2c5680,
15, 0xefc60000,
18, 1812433253> mt19937;
mt19937_64
: moteur twister Mersenne 64 bits (Matsumoto et Nishimura, 2000).
typedef mersenne_twister_engine<unsigned long long, 64, 312, 156,
31, 0xb5026f5aa96619e9ULL,
29, 0x5555555555555555ULL,
17, 0x71d67fffeda60000ULL,
37, 0xfff7eee000000000ULL,
43, 6364136223846793005ULL> mt19937_64;
Pour plus d’informations sur l’algorithme twister de Mersenne, consultez l’article de Wikipedia Mersenne twister.
Exemple
Pour obtenir un exemple de code, consultez <aléatoire>.
Spécifications
Header :<random>
Espace de noms : std