Classe mersenne_twister_engine

Genera una sequenza di numeri integer casuali di alta qualità usando l'algoritmo Mersenne Twister.

Sintassi

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;

Parametri

UIntType
Tipo di risultato Unsigned Integer. Per i tipi possibili, vedere casuale>.<

W
Dimensione parola. Dimensione di ogni parola, in bit, della sequenza di stato. Precondizione:2u < W ≤ numeric_limits<UIntType>::digits

N
Dimensione stato. Numero di elementi (valori) nella sequenza di stato.

M
Dimensione spostamento. Numero di elementi da ignorare durante ogni twist. Precondizione:0 < M ≤ N

R
Bit di maschera. Precondizione:R ≤ W

A
Maschera XOR. Precondizione:A ≤ (1u<<W) - 1u

U, S, T, L
Parametri di spostamento per la crittografia. Usati come valori di spostamento durante la crittografia. Precondizione: U,S,T,L ≤ W

D, B, C
Parametri maschera di bit crittografia. Usati come valori di maschera di bit durante la crittografia. Precondizione: D,B,C ≤ (1u<<W) - 1u

F
Moltiplicatore inizializzazione. Usato per l'inizializzazione della sequenza. Precondizione: F ≤ (1u<<W) - 1u

Membri

mersenne_twister_engine::mersenne_twister_engine
mersenne_twister_engine::discard
mersenne_twister_engine::max
mersenne_twister_engine::min
mersenne_twister_engine::operator()
mersenne_twister_engine::seed

default_seed è una costante membro definita come 5489u, usata come valore di parametro predefinito per mersenne_twister_engine::seed e per il costruttore a valore singolo.

Per altre informazioni sui membri del motore, vedere casuale>.<

Osservazioni:

Questo modello di classe descrive un motore numerico casuale, restituendo valori nell'intervallo chiuso [ 0,2 W1 - ]. Contiene un valore integrale di grandi dimensioni con W * (N - 1) + R bit. Estrae i bit W alla volta da questo valore di grandi dimensioni e, quando ha usato tutti i bit, ruota il valore grande spostando e mescolando i bit in modo che abbia un nuovo set di bit da estrarre. Lo stato del motore è l'ultimo N W-bit valori utilizzati se operator() è stato chiamato almeno N volte, in caso contrario i M Wvalori -bit usati e gli ultimi N - M valori del valore di inizializzazione.

Il generatore ruota il valore elevato che contiene usando un registro di spostamento di feedback generalizzato contorto definito dai valori di spostamento N e M, un valore di rotazione R e una maschera XOR condizionale A. Inoltre, i bit del registro di spostamento non elaborato sono sbattezzati (temprato) in base a una matrice di sramrambling bit definita dai valori U, D, S, B, T, C e L.

L'argomento del modello UIntType deve essere abbastanza grande da contenere valori fino a 2W - 1. I valori degli altri argomenti del modello devono soddisfare i requisiti seguenti: 2u < W, 0 < M, M ≤ N, R ≤ W, U ≤ W, S ≤ W, T ≤ W, L ≤ W, W ≤ numeric_limits<UIntType>::digits, A ≤ (1u<<W) - 1u, B ≤ (1u<<W) - 1u, C ≤ (1u<<W) - 1u, D ≤ (1u<<W) - 1u, and F ≤ (1u<<W) - 1u.

Sebbene sia possibile costruire un generatore direttamente da questo motore, è anche possibile usare uno dei typedef predefiniti seguenti:

mt19937: motore Mersenne Twister a 32 bit (Matsumoto e Nishimura, 1998).

typedef mersenne_twister_engine<unsigned int, 32, 624, 397,
    31, 0x9908b0df,
    11, 0xffffffff,
    7, 0x9d2c5680,
    15, 0xefc60000,
    18, 1812433253> mt19937;

mt19937_64: motore Mersenne Twister a 64 bit (Matsumoto e Nishimura, 2000).

typedef mersenne_twister_engine<unsigned long long, 64, 312, 156,
    31, 0xb5026f5aa96619e9ULL,
    29, 0x5555555555555555ULL,
    17, 0x71d67fffeda60000ULL,
    37, 0xfff7eee000000000ULL,
    43, 6364136223846793005ULL> mt19937_64;

Per informazioni dettagliate sull'algoritmo Mersenne Twister, vedere l'articolo di Wikipedia Mersenne Twister.

Esempio

Per un esempio di codice, vedere casuale>.<

Requisiti

Intestazione:<casuale>

Spazio dei nomi: std

Vedi anche

<random>