Classe mersenne_twister_engine
Gera uma sequência aleatória e de alta qualidade de inteiros com base no algoritmo Mersenne Twister.
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;
Parâmetros
UIntType
O tipo de resultado inteiro sem sinal. Para os tipos possíveis, consulte <random>.W
Tamanho da palavra. Tamanho de cada palavra da sequência de estado, em bits. Pré-condição: 2u < W ≤ numeric_limits<UIntType>::digitsN
Tamanho do estado. A quantidade de elementos (valores) presentes na sequência de estado.M
Tamanho do deslocamento. A quantidade de elementos a serem ignorados a cada mudança. Pré-condição: 0 < M ≤ NR
Bits da máscara. Pré-condição: R ≤ WA
Máscara XOR. Pré-condição: A ≤ (1u<<W) - 1uU, S, T, L
Parâmetros de deformação do deslocamento. Usados como valores de deslocamento durante a codificação (deformação). Pré-condição: U,S,T,L ≤ WD, B, C
Parâmetros de deformação da máscara de bits. Usados como valores da máscara de bits durante a codificação (deformação). Pré-condição: D,B,C ≤ (1u<<W) - 1uF
Multiplicador de inicialização. Usado para ajudar a iniciar a sequência. Pré-condição: F ≤ (1u<<W) - 1u
Membros
mersenne_twister_engine::mersenne_twister_engine |
mersenne_twister_engine::min |
mersenne_twister_engine::discard |
mersenne_twister_engine::operator() |
mersenne_twister_engine::max |
mersenne_twister_engine::seed |
default_seed é um membro constante, definido como 5489u, usado como valor padrão do parâmetro mersenne_twister_engine::seed e construtor de valor único. |
Para obter mais informações sobre membros do mecanismo, consulte <random>.
Comentários
Essa classe de modelo descreve um mecanismo de números aleatórios e mostra valores no intervalo fechado [0, 2W - 1]. Esse mecanismo tem um valor integral alto com W * (N - 1) + R bits. Ele extrai W bits desse valor alto por vez. Depois de usar todos os bits, ele desloca e mistura os bits para mudar o valor e obter um novo conjunto de bits com os quais pode continuar a extração. O estado do mecanismo são os últimos valores com N W bits a serem usados se operator() foi chamado pelo menos N vezes. Caso contrário, os valores com M W bits usados e os últimos valores N - M da semente.
O gerador muda o valor alto usando o registro de deslocamento de comentários generalizados definido pelos valores de deslocamento N e M, um valor de mudança R e uma máscara XOR condicional A. Além disso, os bits do registro de deslocamento bruto são codificados (deformados) de acordo com a matriz de deformação de bits definida pelos valores U, D, S, B, T, C e L.
O argumento do modelo UIntType deve ser grande para comportar valores até 2W - 1. Os valores dos demais argumentos do modelo devem satisfazer estes requisitos: 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.
Embora seja possível construir um gerador diretamente do mecanismo, recomendamos que você use o typedefs predefinido da tabela a seguir.
Nome |
Descrição |
---|---|
mt19937 |
Mecanismo Mersenne Twister de 32 bits (Matsumoto e Nishimura, 1998).
|
mt19937_64 |
Mecanismo Mersenne Twister de 64 bits (Matsumoto e Nishimura, 2000).
|
Para saber mais sobre o algoritmo Mersenne Twister, consulte o artigo Mersenne twister na Wikipedia.
Exemplo
Para obter um exemplo de código, consulte <random>.
Requisitos
Cabeçalho: < random >
Namespace: std