Compartilhar via


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>::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::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.

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 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

Consulte também

Referência

<random>