Поделиться через


Класс linear_congruential_engine

Создает случайную последовательность, используя линейный конгруэнтный алгоритм.

Синтаксис

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);
   };

Параметры

UIntType
Беззнаковый целочисленный тип результата. Сведения о возможных типах см <. в случайном> порядке.

Объект
Множитель. Предварительные условия : см. раздел "Примечания".

C
Приращение. Предварительные условия : см. раздел "Примечания".

M
Остаток от деления. Предварительные условия : см. раздел "Примечания".

Участники

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 — это член-константа, определенный как 1u и используемый как значение по умолчанию для параметра linear_congruential_engine::seed и конструктор с одним значением.

Дополнительные сведения о членах подсистемы см. в случайном <>порядке.

Замечания

Шаблон linear_congruential_engine класса — это самый простой механизм генератора, но не самый быстрый или самый высокий уровень качества. Улучшением этого механизма является substract_with_carry_engine. Ни один из этих механизмов не обеспечивает такую же скорость и качество результатов, как mersenne_twister_engine.

Этот механизм формирует значения указанного пользователем беззнакового целого типа, используя рекуррентное соотношение (period) x(i) = (A * x(i-1) + C) mod M.

Если значение M равно нулю, значение, используемое для этой операции модуля, равно numeric_limits<result_type>::max() + 1. Последним возвращается состояние механизма или начальное значение, если функция operator() не вызывалась.

Если значение M не равно нулю, значения аргументов шаблона A и C должны быть меньше M.

Хотя можно создать генератор на основе этого механизма напрямую, также можно использовать одно из этих предварительно заданных определений типов.

minstd_rand0: Минимальный стандартный механизм 1988 (Льюис, Гудман и Миллер, 1969).

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

minstd_rand: Обновленный минимальный стандартный механизм minstd_rand0 (Парк, Миллер и Стокмайер, 1993).

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

Подробные сведения о линейном конгруэнтном алгоритме см. в статье Википедии Линейный конгруэнтный генератор.

Требования

Заголовок:<random>

Пространство имен: std

См. также

<random>