Namespaces
Variants

std:: mersenne_twister_engine

From cppreference.net
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,
UIntType a, std:: size_t u, UIntType d, std:: size_t s,
UIntType b, std:: size_t t, UIntType c, std:: size_t l, UIntType f

> class mersenne_twister_engine ;
(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 :
**Note:** Le contenu HTML fourni ne contient aucun texte traduisible en dehors des balises ` `, `
`, et ``. Tous les éléments présents sont soit :
- Des balises HTML et attributs (non traduits selon les instructions)
- Du code C++ dans des balises `` (non traduit selon les instructions)
- Des variables et termes spécifiques au C++ (non traduits selon les instructions)
Par conséquent, le document HTML reste identique dans la version française.
  • Étant donné ( 1u << w ) - 1u comme w1 , les expressions suivantes sont toutes true :
  • a <= w1
  • b <= w1
  • c <= w1
  • d <= w1
  • f <= w1
**Note:** Le contenu à traduire se compose uniquement de code C++ dans les balises ` `. Comme demandé, je n'ai pas traduit : - Les balises HTML et leurs attributs - Le code C++ (variables `a`, `b`, `c`, `d`, `f`, `w1` et l'opérateur `<=`) - La structure HTML complète a été préservée sans modification

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 :

L' algorithme de transition du mersenne_twister_engine ( TA(x i ) ) est défini comme suit :

  1. 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 .
  2. 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 :

  1. Soit z 1 égal à X i xor ((X i rshift u) bitand d) .
  2. Soit z 2 égal à X i xor (((X i lshift s) mod 2 w
    ) bitand b)
    .
  3. Soit z 3 égal à X i xor (((X i lshift t) mod 2 w
    ) bitand c)
    .
  4. Soit z 4 égal à z 3 xor (z 3 rshift l) .
  5. 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 ,
32 , 624 , 397 , 31 ,
0x9908b0df , 11 ,
0xffffffff , 7 ,
0x9d2c5680 , 15 ,
0xefc60000 , 18 , 1812433253 >
Mersenne Twister 32 bits par Matsumoto et Nishimura, 1998

mt19937_64 (C++11)

std :: mersenne_twister_engine < std:: uint_fast64_t ,
64 , 312 , 156 , 31 ,
0xb5026f5aa96619e9 , 29 ,
0x5555555555555555 , 17 ,
0x71d67fffeda60000 , 37 ,
0xfff7eee000000000 , 43 ,
6364136223846793005 >
Mersenne Twister 64 bits par Matsumoto et Nishimura, 2000

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)
effectue des opérations d'entrée/sortie sur flux pour un moteur de nombres pseudo-aléatoires
(modèle de fonction)

Exemple