Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 2W. 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