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