Partilhar via


Classe linear_congruential_engine

Gera uma sequência aleatória pelo algoritmo congruente linear.

Sintaxe

class linear_congruential_engine{
   public:  // types
   typedef UIntType result_type;
   // engine characteristics
   static constexpr result_type multiplier = a;
   static constexpr result_type increment = c;
   static constexpr result_type modulus = m;
   static constexpr result_type min() { return c == 0u  1u: 0u; }
   static constexpr result_type max() { return m - 1u; }
   static constexpr result_type default_seed = 1u;
   // constructors and seeding functions
   explicit linear_congruential_engine(result_type s = default_seed);
   template <class Sseq>
   explicit linear_congruential_engine(Sseq& q);
   void seed(result_type s = default_seed);
   template <class Sseq>
   void seed(Sseq& q);
   // generating functions
   result_type operator()();
   void discard(unsigned long long z);
   };

Parâmetros

UIntType
O tipo de resultado inteiro sem sinal. Para encontrar os tipos possíveis, confira <random>.

A
Multiplicador. Pré-condição: consulte a seção Comentários.

C
Incremento. Pré-condição: consulte a seção Comentários.

M
Módulo. Pré-condição: consulte os comentários.

Membros

linear_congruential_engine::linear_congruential_engine linear_congruential_engine::discard
linear_congruential_engine::max
linear_congruential_engine::min
linear_congruential_engine::operator()
linear_congruential_engine::seed

default_seed é um membro constante, definido como 1u, usado como valor padrão do parâmetro linear_congruential_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 linear_congruential_engine é o mecanismo gerador mais simples, mas não o mais rápido nem de maior qualidade. Uma melhoria em relação a esse mecanismo é o substract_with_carry_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 integral não assinado especificado pelo usuário usando a relação de recorrência (ponto final) x(i) = (A * x(i-1) + C) mod M.

Se M for igual a zero, o valor usado para essa operação de módulo será numeric_limits<result_type>::max() + 1. O estado do mecanismo é o último valor retornado ou o valor semente, se nenhuma chamada tiver sido feita a operator().

Se M for diferente de zero, os valores dos argumentos de modelo A e C deverão ser inferiores a M.

Embora seja possível construir um gerador diretamente desse mecanismo, também é possível usar um dos typedefs predefinidos.

minstd_rand0: mecanismo padrão mínimo de 1988 (Lewis, Goodman e Miller, 1969).

typedef linear_congruential_engine<unsigned int, 16807, 0, 2147483647> minstd_rand0;

minstd_rand: mecanismo padrão mínimo atualizado minstd_rand0 (Park, Miller e Stockmeyer, 1993).

typedef linear_congruential_engine<unsigned int, 48271, 0, 2147483647> minstd_rand;

Para obter informações detalhadas sobre o algoritmo de mecanismo congruente linear, consulte o artigo da Wikipédia Geradores congruentes lineares.

Requisitos

Cabeçalho:<random>

Namespace: std

Confira também

<random>