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) (desde C++11)
explicit mersenne_twister_engine ( result_type value ) ;
(2) (desde C++11)
template < class SeedSeq >
explicit mersenne_twister_engine ( SeedSeq & seq ) ;
(3) (desde C++11)
mersenne_twister_engine ( const mersenne_twister_engine & other ) ;
(4) (desde C++11)
(declarado implícitamente)

Construye el motor de números pseudoaleatorios.

1) El constructor por defecto.
  • Si el motor construido por defecto es de tipo std::mt19937 , la 10000ª invocación consecutiva del mismo produce el valor 4123659995 .
  • Si el motor construido por defecto es de tipo std::mt19937_64 , la 10000ª invocación consecutiva del mismo produce el valor 9981545732273789042 .
2) Construye el motor con un valor de semilla value . Dado 2 w
como p , el estado inicial del motor se determina de la siguiente manera:
  1. Establece X -n a value % p .
  2. Para cada entero i en [ i - n , - 1 ] , establece X i a [f·(X i-1 xor (X i-1 rshift (w-2)))+i mod n] mod p , donde xor y rshift representan respectivamente XOR bit a bit y desplazamiento a la derecha bit a bit integrados.
3) Construye el motor con una secuencia de semilla seq . Dado std:: size_t ( w / 32 ) + 1 como k , el estado inicial del motor se determina de la siguiente manera:
  1. Crea un objeto de arreglo inventado a de longitud n * k .
  2. Llama seq. generate ( a + 0 , a + n * k ) .
  3. Para cada entero i en [ - n , - 1 ] , establece X i a (∑ k-1
    j=0
    a k(i+n)+j ·2 32j
    ) mod 2 w
    .
  4. Si los bits más significativos w − r de X -n son cero, y si cada uno de los otros X i resultantes es 0 , cambia X -n a 2 w-1
    .
Esta sobrecarga participa en la resolución de sobrecarga solo si SeedSeq cumple con los requisitos de SeedSequence .
4) El constructor de copia. Al construir, * this == other es true .

Contenidos

Parámetros

value - valor de semilla a utilizar en la inicialización del estado interno
seq - secuencia de semilla a utilizar en la inicialización del estado interno

Complejidad

1,2) O(n) .
3) Igual que la complejidad de la llamada a seq.generate .
4) O(n) .

Excepciones

3) Si SeedSeq no es std::seed_seq , lanza las excepciones generadas por la llamada seq.generate .

Ejemplo

#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);
}

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2181 C++11 la sobrecarga ( 3 ) no lanzaría excepción incluso si la llamada seq.generate lanza propaga la excepción
P0935R0 C++11 el constructor por defecto era explícito hecho implícito

Véase también

establece el estado actual del motor
(función miembro pública)