Classe subtract_with_carry_engine
Gera uma sequência aleatória usando o algoritmo de subtração com transferência (Fibonacci com retardo).
template<class UIntType, size_t W, size_t S, size_t R>
class subtract_with_carry_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: 0 < W ≤ numeric_limits<UIntType>::digitsS
Curto retardo. Número de valores inteiros. Pré-condição: 0 < S < RR
Longo retardo. Determina a recorrência na série gerada.
Membros
subtract_with_carry_engine::subtract_with_carry_engine |
subtract_with_carry_engine::min |
subtract_with_carry_engine::discard |
subtract_with_carry_engine::operator() |
subtract_with_carry_engine::max |
subtract_with_carry_engine::seed |
default_seed é um membro constante, definido como 19780503u, usado como valor padrão do parâmetro subtract_with_carry_engine::seed e construtor de valor único. |
Para obter mais informações sobre membros do mecanismo, consulte <random>.
Comentários
A classe de modelo substract_with_carry_engine é um aprimoramento em relação a linear_congruential_engine. Nenhum desses mecanismos é tão rápido nem tem resultados de qualidade tão altos quanto o mersenne_twister_engine.
Esse mecanismo produz valores de um tipo de integral não assinalado especificado pelo usuário usando a relação de recorrência (ponto final) x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod M, em que cy(i) possui o valor 1 se x(i - S) - x(i - R) - cy(i - 1) < 0, do contrário 0 e M possuírão o valor 2W. O estado do mecanismo é um indicador de transferência mais R valores. Esses valores são formados pelos últimos valores R retornados se operator() tiver sido chamado pelo menos R vezes; caso contrário, são formados pelos valores N que foram retornados e os últimos valores de R - N da semente.
O argumento de modelo UIntType deve ser grande o suficiente para manter valores até M - 1.
Embora seja possível construir um gerador diretamente desses mecanismos, também é possível usar um dos typedefs predefinidos na tabela a seguir.
Nome |
Descrição |
---|---|
ranlux24_base |
Usado como base para ranlux24.
|
ranlux48_base |
Usado como base para ranlux48.
|
Para obter informações detalhadas sobre os algoritmos de mecanismo de subtração com transferência, consulte o artigo da Wikipedia Lagged Fibonacci generator (em inglês).
Requisitos
Cabeçalho: < random >
Namespace: std