linear_congruential_engine — Klasa
Generuje losową sekwencję według liniowego algorytmu kongruentalnego.
Składnia
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);
};
Parametry
UIntType
Typ wyniku niepodpisanej liczby całkowitej. Aby uzyskać informacje o możliwych typach, zobacz losowe>.<
A
Mnożnik. Warunek wstępny: zobacz sekcję Uwagi.
C
Przyrost. Warunek wstępny: zobacz sekcję Uwagi.
M
Modulo. Warunek wstępny: Zobacz uwagi.
Elementy członkowskie
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
jest stałą składową zdefiniowaną jako 1u
, używaną jako domyślna wartość parametru dla linear_congruential_engine::seed
i konstruktora pojedynczej wartości.
Aby uzyskać więcej informacji na temat składowych aparatu, zobacz losowe>.<
Uwagi
Szablon linear_congruential_engine
klasy jest najprostszym aparatem generatora, ale nie najszybszym lub najwyższym jakości. Ulepszeniem tego aparatu jest substract_with_carry_engine. Żaden z tych silników nie jest tak szybki, jak i z tak wysokiej jakości wynikami, jak mersenne_twister_engine.
Ten aparat generuje wartości typu całkowitego niepodpisanego określonego przez użytkownika przy użyciu relacji cyklu (kropka). x(i) = (A * x(i-1) + C) mod M
Jeśli M ma wartość zero, wartość użyta dla tej operacji modulu to numeric_limits<result_type>::max() + 1
. Stan aparatu to ostatnia zwrócona wartość lub wartość inicjatora, jeśli nie wykonano wywołania metody operator()
.
Jeśli język M nie jest zerowy, wartości argumentów szablonu A i C muszą być mniejsze niż M.
Chociaż generator z tego aparatu można skonstruować bezpośrednio, można również użyć jednej z tych wstępnie zdefiniowanych definicji typów.
minstd_rand0
: 1988 minimalny standardowy silnik (Lewis, Goodman i Miller, 1969).
typedef linear_congruential_engine<unsigned int, 16807, 0, 2147483647> minstd_rand0;
minstd_rand
: Zaktualizowano minimalny standardowy silnik minstd_rand0
(Park, Miller i Stockmeyer, 1993).
typedef linear_congruential_engine<unsigned int, 48271, 0, 2147483647> minstd_rand;
Aby uzyskać szczegółowe informacje na temat liniowego algorytmu aparatu kongruentnego, zobacz artykuł Wikipedia Linear congruential generator(Generator kongruential).
Wymagania
Nagłówek:<losowy>
Przestrzeń nazw: std