mersenne_twister_engine Class
Genera una sequenza casuale dall'algoritmo di tornado di 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)();
};
Parametri
UIntType
Il tipo di risultato intero senza segno.W
Il parametro di modulo a W.N
Il parametro del motore N.M
Il parametro del motore m.R
Il parametro del motore R.A
Il parametro del motore di Su.U
Il parametro del motore U.D
Il parametro del motore D.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.F
Il parametro del motore f.
Note
Questa classe modello viene descritto <random>.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:
1 < M <= N
0 <= R, U, S, T, L <= W
0 <= A, B, C <= 2W - 1
W * (N - 1) + R deve essere una perfezione di Mersenne
Il generatore torce il valore elevato che utilizza eseguendo il codice seguente:
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];
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) & D);
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
Vedere anche
Riferimenti
mersenne_twister_engine::discard
mersenne_twister_engine::mersenne_twister_engine