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.
value. Начальное состояние генератора определяется следующим образом: - Если
c % m == 0иvalue % m == 0оба являютсяtrue, состояние равно1. - В противном случае состояние равно
value % m.
3) Создаёт генератор с последовательностью начальных значений
seq. Если std::size_t(std::log2(m) / 32) + 1 задано как k, начальное состояние генератора определяется следующим образом: - Создаёт фиктивный объект массива
aдлиныk + 3. - Вызывает
seq.generate(a + 0, a + k + 3). - Пусть
Sравно \(\scriptsize (\sum^{k-1}_{j=0} a_{j+3} \cdot 2^{32j}) \mod m \)(∑k-1j=0 aj+3·232j) mod m. - Если
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 | конструктор по умолчанию был явным | сделан неявным |
См. также
| задаёт текущее состояние генератора (открытая функция-член) |
© 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