mersenne_twister Class
Genera una secuencia aleatoria por el algoritmo de tornado de Mersenne.Retenido por compatibilidad TR1.Utilice mersenne_twister_engine Class en su lugar.
template<class UIntType,
int W, int N, int M, int R,
UIntType A, int U, int S,
UIntType B, int T, UIntType C, int L>
class mersenne_twister {
public:
typedef mersenne_twister<UIntType, W, N, M, R,
P, U, S, B, T, C, L> _MyT;
typedef UIntType result_type;
static const int word_size = W;
static const int state_size = N;
static const int shift_size = M;
static const int mask_bits = R;
static const int UIntType parameter_a = A;
static const int output_u = U;
static const int output_s = S;
static const UIntType output_b = B;
static const int output_t = T;
static const UIntType output_c = C;
static const int output_l = L;
static const UIntType default_seed = 5489U;
explicit mersenne_twister(unsigned long x0 = default_seed);
mersenne_twister(const mersenne_twister& right);
mersenne_twister(mersenne_twister& right);
template<class Gen>
mersenne_twister(Gen& gen);
void seed(unsigned long x0 = default_seed);
template<class Gen>
void seed(Gen& gen);
result_type min() const;
result_type max() const;
result_type operator()();
};
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.R
El parámetro del motor de r.A
El parámetro del motor de A.U
El parámetro del motor de U.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.
Comentarios
la clase de plantilla describe un motor simple.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:
0 < M <= N
0 <= R, U, S, T, L <= W
0 <= A, B, C <= 2W
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 (int i = 0; i < N; ++i)
{
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 (int 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);
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