mersenne_twister_engine Class
Gera uma seqüência aleatório pelo algoritmo de desenvolvida 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
O tipo do resultado inteiro sem sinal de.W
O parâmetro do mecanismo de W.N
O parâmetro do mecanismo de Em.M
O parâmetro do mecanismo de M.R
O parâmetro do mecanismo de R.A
O parâmetro do mecanismo de.U
O parâmetro do mecanismo dos EUA.D
O parâmetro do mecanismo de De.S
O parâmetro do mecanismo de.B
O parâmetro do mecanismo de B.T
O parâmetro do mecanismo de T.C
O parâmetro do mecanismo de C.L
L o parâmetro do mecanismo.F
O parâmetro do mecanismo F.
Comentários
Esta classe de modelo descreve <random>.Contém um valor grande integral com bit de W * (N - 1) + R .Extrai bit de W em vez de este valor grande, e quando usava todos os bits ele torce o valor grande deslocando e misturando os bits de modo que tenha um novo conjunto de bits para extrair de.O estado do mecanismo é No últimoW- valores de bits usados operator() foi chamado pelo menos tempo de N , se não MW- os valores de bits que foram usados e os mais recentes de N - M semente.
O argumento UIntType de modelo deve ser grande o suficiente para armazenar valores até 2W - 1.Os valores dos outros argumentos de modelo devem satisfazer os requisitos a seguir:
1 < M <= N
0 <= R, U, S, T, L <= W
0 <= A, B, C <= 2W - 1
W * (N - 1) + R deve ser um primo de Mersenne
O gerador torce o maior valor que comporta executando o código a seguir:
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];
onde LMASK é Wsem sinal - o valor de bits com os bits baixos de R definido como 1 e o resto de seus bit definido como 0, e são HMASK o complemento de LMASK.
O gerador mantém um índice atual idx inicializado para 0.Extrai bit executando o código a seguir:
temp = x[idx++];
temp = temp ^ ((temp >> U) & D);
temp = temp ^ ((temp << S) & B);
temp = temp ^ ((temp << T) & C);
temp = temp ^ (temp >> L);
Quando idx atinge N o gerador torce o valor armazenado e defina idx de volta para 0.
Requisitos
Cabeçalho: <random>
namespace: STD
Consulte também
Referência
mersenne_twister_engine::discard
mersenne_twister_engine::mersenne_twister_engine