Partilhar via


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 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 motor de transporte, consulte o artigo da Wikipédia Gerador de Fibonacci defasgado.

Requisitos

Cabeçalho:<random>

Namespace: std

Confira também

<random>