mersenne_twister_engine Class
Genera una secuencia aleatoria por el algoritmo de tornado de Mersenne.
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 {
public:
typedef UIntType result_type;
static const size_t word_size = W;
static const size_t state_size = N;
static const size_t shift_size = M;
static const size_t mask_bits = R;
static const UIntType xor_mask = A;
static const size_t tempering_u = U;
static const size_t tempering_d = D;
static const size_t tempering_s = S;
static const UIntType tempering_b = B;
static const size_t tempering_t = T;
static const UIntType tempering_c = C;
static const size_t tempering_l = L;
static const UIntType initialization_multiplier = C;
static const result_type default_seed = 5489U;
explicit mersenne_twister_engine(unsigned long x0 = default_seed);
explicit mersenne_twister_engine(seed_seq& seq);
void seed(unsigned long x0 = default_seed);
template<class Gen>
void seed(seed_seq& seq);
result_type min() const;
result_type max() const;
result_type operator()();
void discard(unsigned long long count)();
};
Parámetros
UIntType
El tipo de resultado de entero sin signo.W
El parámetro del motor del w.N
El parámetro del motor de n.M
El parámetro del motor de m.R
El parámetro del motor de r.A
El parámetro del motor de A.U
El parámetro del motor de U.D
El parámetro del motor de d.S
El parámetro del motor de s.B
El parámetro del motor de b.T
El parámetro del motor de t.C
El parámetro del motor de C.L
El parámetro del motor de l.F
El parámetro de motor f.
Comentarios
esta clase de plantilla describe <random>.Contiene un valor entero grande con los bits de W * (N - 1) + R .Extrae los bits de W al mismo tiempo de este valor grande y, cuando ha utilizado todos los bits se distorsiona el valor grande moviendo y mezclando los bits de modo que tenga un nuevo conjunto de bits a extraer de.El estado del motor es NpasadoW- valores de bit utilizados si operator() se ha llamado al menos los tiempos de N , si no MW- valores de bit se han utilizado que los valores pasados de N - M seed.
El argumento UIntType template debería ser lo bastante grande para contener valores hasta 2W - 1.Los valores de los otros argumentos de plantilla deben cumplir los siguientes requisitos:
1 < M <= N
0 <= R, U, S, T, L <= W
0 <= A, B, C <= 2W - 1
W * (N - 1) + R debe ser una bonificación en Mersenne
El generador distorsiona el valor grande que copia ejecutando el código siguiente:
for (size_t i = 0; i < N; ++i)
{ // twist
temp = (x[i] & LMASK) << (W - 1) | (x[i + 1] & HMASK) >> 1;
if (temp & 1)
y[i] = (temp >> 1) ^ A ^ x[(i + R) % N];
else
y[i] = (temp >> 1) ^ x[(i + R) % N];
}
for (size_t i = 0; i < N; ++i)
x[i] = y[i];
donde es WLMASK sin signo - el valor de bit con los bits bajos de R establecidos en 1 y el resto de los bits establecidos en 0, y HMASK es el complemento de LMASK.
El generador contiene un índice idx actual de inicializado a 0.extrae los bits ejecutando el código siguiente:
temp = x[idx++];
temp = temp ^ ((temp >> U) & D);
temp = temp ^ ((temp << S) & B);
temp = temp ^ ((temp << T) & C);
temp = temp ^ (temp >> L);
Cuando idx alcanza N el generador distorsiona el valor almacenado y establece idx a 0.
Requisitos
encabezado: <aleatorio>
espacio de nombres: std
Vea también
Referencia
mersenne_twister_engine::discard
mersenne_twister_engine::mersenne_twister_engine