Classe subtract_with_carry_engine
Gera uma sequência aleatória usando o algoritmo de subtração com transferência (Fibonacci com retardo).
Sintaxe
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 encontrar os tipos possíveis, confira <random>.
W
Tamanho da palavra. Tamanho de cada palavra da sequência de estado, em bits. Pré-condição: 0 < W ≤ numeric_limits<UIntType>::digits
S
Curto retardo. Número de valores inteiros. Pré-condição: 0 < S < R
R
Longo retardo. Determina a recorrência na série gerada.
Membros
subtract_with_carry_engine::subtract_with_carry_engine
subtract_with_carry_engine::max
subtract_with_carry_engine::min
subtract_with_carry_engine::discard
subtract_with_carry_engine::operator()
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, confira <aleatório>.
Comentários
O modelo de classe substract_with_carry_engine
é uma melhoria em relação ao linear_congruential_engine. Nenhum desses mecanismos é tão rápido nem apresenta resultados de qualidade tão altos quanto o mersenne_twister_engine.
Esse mecanismo produz valores de um tipo integral sem sinal 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)
terá o valor 1
se x(i - S) - x(i - R) - cy(i - 1) < 0
; caso contrário, 0
e M
terão o valor 2
W. O estado do mecanismo é um indicador de transporte mais os valores R. 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 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 com base nesse mecanismo, também é possível usar um dos typedefs predefinidos:
ranlux24_base
: usado como base para ranlux24
.
typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;
ranlux48_base
: usado como base para ranlux48
.
typedef subtract_with_carry_engine<unsigned long long, 48, 5, 12> ranlux48_base;
Para obter informações detalhadas sobre o algoritmo de subtração com mecanismo de transporte, consulte o artigo da Wikipedia Gerador de Fibonacci com atraso.
Requisitos
Cabeçalho:<random>
Namespace: std