Udostępnij za pośrednictwem


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

Zobacz też

<losowy>