Namespaces
Variants

std::mersenne_twister_engine<UIntType,w,n,m,r,a,u,d,s,b,t,c,l,f>:: mersenne_twister_engine

From cppreference.net
mersenne_twister_engine ( ) : mersenne_twister_engine ( default_seed ) { }
(1) (depuis C++11)
explicit mersenne_twister_engine ( result_type value ) ;
(2) (depuis C++11)
template < class SeedSeq >
explicit mersenne_twister_engine ( SeedSeq & seq ) ;
(3) (depuis C++11)
mersenne_twister_engine ( const mersenne_twister_engine & other ) ;
(4) (depuis C++11)
(déclaré implicitement)

Construit le moteur de nombres pseudo-aléatoires.

1) Le constructeur par défaut.
  • Si le moteur construit par défaut est de type std::mt19937 , la 10000ème invocation consécutive produit la valeur 4123659995 .
  • Si le moteur construit par défaut est de type std::mt19937_64 , la 10000ème invocation consécutive produit la valeur 9981545732273789042 .
2) Construit le moteur avec une valeur de graine value . Étant donné 2 w
comme p , l'état initial du moteur est déterminé comme suit :
  1. Définit X -n à value % p .
  2. Pour chaque entier i dans [ i - n , - 1 ] , définit X i à [f·(X i-1 xor (X i-1 rshift (w-2)))+i mod n] mod p , où xor et rshift représentent respectivement les opérations XOR bit à bit et décalage à droite bit à bit intégrées.
3) Construit le moteur avec une séquence de graines seq . Étant donné std:: size_t ( w / 32 ) + 1 comme k , l'état initial du moteur est déterminé comme suit :
  1. Crée un objet tableau inventé a de longueur n * k .
  2. Appelle seq. generate ( a + 0 , a + n * k ) .
  3. Pour chaque entier i dans [ - n , - 1 ] , définit X i à (∑ k-1
    j=0
    a k(i+n)+j ·2 32j
    ) mod 2 w
    .
  4. Si les bits w − r les plus significatifs de X -n sont nuls, et si chacun des autres X i résultants est 0 , modifie X -n en 2 w-1
    .
Cette surcharge participe à la résolution de surcharge uniquement si SeedSeq satisfait aux exigences de SeedSequence .
4) Le constructeur de copie. Lors de la construction, * this == other est true .

Table des matières

Paramètres

value - valeur de départ à utiliser dans l'initialisation de l'état interne
seq - séquence de départ à utiliser dans l'initialisation de l'état interne

Complexité

1,2) O(n) .
3) Identique à la complexité de l'appel seq.generate .
4) O(n) .

Exceptions

3) Si SeedSeq n'est pas std::seed_seq , lance les exceptions levées par l'appel seq.generate .

Exemple

#include <cassert>
#include <random>
int main()
{
    std::mt19937 gen32; // overload (1)
    std::mt19937_64 gen64; // overload (1)
    gen32.discard(10000 - 1);
    gen64.discard(10000 - 1);
    assert(gen32() == 4123659995);
    assert(gen64() == 9981545732273789042ull);
}

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 2181 C++11 la surcharge ( 3 ) ne lançait pas d'exception même si l'appel à seq.generate lance une exception propage l'exception
P0935R0 C++11 le constructeur par défaut était explicite rendu implicite

Voir aussi

définit l'état actuel du moteur
(fonction membre publique)