Spec-Zone.ru › C++

std::linear_congruential_engine<UIntType,a,c,m>::linear_congruential_engine

linear_congruential_engine() : linear_congruential_engine(default_seed) {}
(1) (с C++11)
explicit linear_congruential_engine( result_type value );
(2) (с C++11)
template< class SeedSeq >
explicit linear_congruential_engine( SeedSeq& seq );
(3) (с C++11)
linear_congruential_engine( const linear_congruential_engine& other );
(4) (с C++11)
(неявно объявлен)

Создаёт генератор псевдослучайных чисел.

1) Конструктор по умолчанию.
  • Если созданный по умолчанию генератор имеет тип std::minstd_rand0, то его 10000-й последовательный вызов возвращает значение 1043618065.
  • Если созданный по умолчанию генератор имеет тип std::minstd_rand, то его 10000-й последовательный вызов возвращает значение 399268537.
2) Создаёт генератор со значением начального числа value. Начальное состояние генератора определяется следующим образом:
  • Если c % m == 0 и value % m == 0 оба являются true, состояние равно 1.
  • В противном случае состояние равно value % m.
3) Создаёт генератор с последовательностью начальных значений seq. Если std::size_t(std::log2(m) / 32) + 1 задано как k, начальное состояние генератора определяется следующим образом:
  1. Создаёт фиктивный объект массива a длины k + 3.
  2. Вызывает seq.generate(a + 0, a + k + 3).
  3. Пусть S равно \(\scriptsize (\sum^{k-1}_{j=0} a_{j+3} \cdot 2^{32j}) \mod m \)(∑k-1j=0 aj+3·232j) mod m.
  4. Если c % m == 0 и S == 0 оба являются true, задаёт состояние генератора равным 1. В противном случае задаёт состояние генератора равным S.
Эта перегрузка участвует в разрешении перегрузки, только если SeedSeq соответствует требованиям SeedSequence.
4) Конструктор копирования. После создания *this == other имеет значение true.

Параметры

value - значение начального числа, используемое для инициализации внутреннего состояния
seq - последовательность начальных значений, используемая для инициализации внутреннего состояния

Сложность

1,2) Константная.
3) Такая же, как сложность вызова seq.generate.
4) Константная.

Исключения

3) Если SeedSeq не является std::seed_seq, выбрасывает исключения, выброшенные вызовом seq.generate.

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены ретроспективно к ранее опубликованным стандартам C++.

Отчёт об ошибке Применяется к Опубликованное поведение Правильное поведение
LWG 2181 C++11 перегрузка (3) не выбрасывала исключение, даже если вызов seq.generate выбрасывал исключение передаёт исключение дальше
P0935R0 C++11 конструктор по умолчанию был явным сделан неявным

См. также

seed
задаёт текущее состояние генератора
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/random/linear_congruential_engine/linear_congruential_engine

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API