std:: mersenne_twister_engine
|
Défini dans l'en-tête
<random>
|
||
|
template
<
class
UIntType,
std::
size_t
w,
std::
size_t
n,
std::
size_t
m,
std::
size_t
r,
|
(depuis C++11) | |
mersenne_twister_engine
est un générateur de nombres aléatoires basé sur l'algorithme
Mersenne Twister
. Il produit des nombres aléatoires non signés de type
UIntType
de haute qualité, mais non cryptographiquement sûrs, sur l'intervalle
[0, 2
w
)
.
Table des matières |
Paramètres du modèle
| UIntType | - | Le type de résultat généré par le générateur. L'effet est indéfini si ce n'est pas l'un de unsigned short , unsigned int , unsigned long , ou unsigned long long . |
| w | - | la puissance de deux qui détermine la plage de valeurs générées par le moteur |
| n | - | le degré de récurrence |
| m | - | le mot du milieu, un décalage utilisé dans la relation de récurrence définissant l'état |
| r | - | le nombre de bits du masque de bits inférieur, également appelé valeur de torsion |
| a | - | le masque XOR conditionnel, c'est-à-dire les coefficients de la matrice de torsion en forme normale rationnelle |
| u, d, s, b, t, c, l | - | les 1 er à 7 e composantes de la matrice de brouillage de bits (tempérage) |
| f | - | le multiplicateur d'initialisation |
Si l'une des restrictions suivantes est violée, le programme est mal formé :
-
m
est dans
[1,n]. - Les expressions suivantes sont toutes true :
-
- w >= 3
- w >= r
- w >= u
- w >= s
- w >= t
- w >= l
- w <= std:: numeric_limits < UIntType > :: digits
`, `
`, et `
- Étant donné ( 1u << w ) - 1u comme w1 , les expressions suivantes sont toutes true :
-
- a <= w1
- b <= w1
- c <= w1
- d <= w1
- f <= w1
Propriétés du générateur
La
taille
des états du
mersenne_twister_engine
est
n
, chacun d'eux consiste en une séquence
X
de
n
valeurs de type
result_type
.
X
j
représente la
j mod n
ième valeur (en commençant à 0) de
X
.
Étant donné les notations d'opérations bit à bit suivantes :
- bitand , intégré ET binaire .
- xor , intégré OU exclusif binaire .
- lshift , intégré décalage binaire vers la gauche .
- rshift , intégré décalage binaire vers la droite .
L'
algorithme de transition
du
mersenne_twister_engine
(
TA(x
i
)
) est défini comme suit :
- Concaténer les w - r bits supérieurs de X i-n avec les r bits inférieurs de X i+1-n pour obtenir une valeur entière non signée Y .
- Soit y égal à a·(Y bitand 1) , et définir X i comme X i+m−n xor (Y rshift 1) xor y .
L'
algorithme de génération
de
mersenne_twister_engine
(
GA(x
i
)
) est défini comme suit :
- Soit z 1 égal à X i xor ((X i rshift u) bitand d) .
-
Soit
z
2
égal à
X
i
xor (((X
i
lshift s) mod 2
w
) bitand b) . -
Soit
z
3
égal à
X
i
xor (((X
i
lshift t) mod 2
w
) bitand c) . - Soit z 4 égal à z 3 xor (z 3 rshift l) .
- Retourner z 4 comme résultat (c'est-à-dire GA(x i )=z 4 ).
Spécialisations prédéfinies
Les spécialisations suivantes définissent le moteur de nombres aléatoires avec deux ensembles de paramètres couramment utilisés :
|
Défini dans l'en-tête
<random>
|
|
| Type | Définition |
mt19937
(C++11)
|
std
::
mersenne_twister_engine
<
std::
uint_fast32_t
,
|
mt19937_64
(C++11)
|
std
::
mersenne_twister_engine
<
std::
uint_fast64_t
,
|
Types imbriqués
| Type | Définition |
result_type
|
UIntType
|
Membres de données
|
constexpr size_t
word_size
[static]
|
w
(constante de membre public static) |
|
constexpr size_t
state_size
[static]
|
n
(constante de membre public static) |
|
constexpr size_t
shift_size
[static]
|
m
(constante de membre public static) |
|
constexpr size_t
mask_bits
[static]
|
r
(constante de membre public static) |
|
constexpr UIntType
xor_mask
[static]
|
a
(constante de membre public static) |
|
constexpr size_t
tempering_u
[static]
|
u
(constante de membre public static) |
|
constexpr UIntType
tempering_d
[static]
|
d
(constante de membre public static) |
|
constexpr size_t
tempering_s
[static]
|
s
(constante de membre public static) |
|
constexpr UIntType
tempering_b
[static]
|
b
(constante de membre public static) |
|
constexpr size_t
tempering_t
[static]
|
t
(constante de membre public static) |
|
constexpr UIntType
tempering_c
[static]
|
c
(constante de membre public static) |
|
constexpr size_t
tempering_l
[static]
|
l
(constante de membre public static) |
|
constexpr UIntType
initialization_multiplier
[static]
|
f
(constante de membre public static) |
|
constexpr UIntType
default_seed
[static]
|
5489u
(constante de membre public static) |
Fonctions membres
Construction et Initialisation |
|
|
construit le moteur
(fonction membre publique) |
|
|
définit l'état actuel du moteur
(fonction membre publique) |
|
Génération |
|
|
fait avancer l'état du moteur et retourne la valeur générée
(fonction membre publique) |
|
|
fait avancer l'état du moteur d'une quantité spécifiée
(fonction membre publique) |
|
Caractéristiques |
|
|
[static]
|
obtient la plus petite valeur possible dans la plage de sortie
(fonction membre publique statique) |
|
[static]
|
obtient la plus grande valeur possible dans la plage de sortie
(fonction membre publique statique) |
Fonctions non membres
|
(C++11)
(C++11)
(supprimé en C++20)
|
compare les états internes de deux moteurs de nombres pseudo-aléatoires
(fonction) |
|
(C++11)
|
effectue des opérations d'entrée/sortie sur flux pour un moteur de nombres pseudo-aléatoires
(modèle de fonction) |
Exemple
|
Cette section est incomplète
Raison : aucun exemple |