mersenne_twister Class
Genera una sequenza casuale dall'algoritmo di tornado di Mersenne.Mantenuto per compatibilità TR1.In alternativa, utilizzare mersenne_twister_engine Class.
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()();
};
Parametri
UIntType
Il tipo di risultato intero senza segno.W
Il parametro di modulo a W.N
Il parametro del motore N.R
Il parametro del motore R.A
Il parametro del motore di Su.U
Il parametro del motore U.S
Il parametro del motore di.B
Il parametro del motore di B.T
Il parametro del motore T.C
Il parametro del motore di C.L
La Pre-elaborazione parametro del modulo.
Note
La classe modello descrive un motore semplice.Utilizza un valore elevato integrale con i bit W * (N - 1) + R.Estrae i bit W per volta da questo valore elevato e quando utilizzava tutti i bit torce il valore elevato scorrendo e combinando i bit in modo che abbia un nuovo set bit di estrarre da.Lo stato del motore è l'ultimo NW- valori di bit utilizzati se operator() è stato chiamato almeno tempi N in caso contrario, MW- valori di bit utilizzati e gli ultimi valori N - M inizio.
Un argomento di template UIntType deve essere sufficiente per contenere valori fino a 2W - 1.I valori degli altri argomenti di modello devono soddisfare i requisiti seguenti:
0 < M <= N
0 <= R, U, S, T, L <= W
0 <= A, B, C <= 2W
W * (N - 1) + R deve essere una perfezione di Mersenne
Il generatore torce il valore elevato che utilizza eseguendo il codice seguente:
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];
dove LMASK è Wsenza segno (il valore di bit con i bit significativi R impostate su 1 e il resto dei bit impostati su 0 e HMASK è il complemento LMASK.
Il generatore è contenuta un indice corrente idx inizializzato su 0.Estrae i bit eseguendo il codice seguente:
temp = x[idx++];
temp = temp ^ (temp >> U);
temp = temp ^ ((temp << S) & B);
temp = temp ^ ((temp << T) & C);
temp = temp ^ (temp >> L);
Quando idx raggiunge N il generatore torce il valore archiviato e imposta idx di nuovo su 0.
Requisiti
intestazione: <random>
Spazio dei nomi: deviazione standard