std::linear_congruential_engine
Определён в заголовочном файле <random> | ||
|---|---|---|
template<
class UIntType,
UIntType a,
UIntType c,
UIntType m
> class linear_congruential_engine;
| (начиная с C++11) |
linear_congruential_engine — это движок случайных чисел, основанный на линейном конгруэнтном генераторе (LCG).
Параметры шаблона
| UIntType | - | Тип результата, генерируемого генератором. Поведение не определено, если это не один из типов unsignedshort, unsignedint, unsignedlong или unsignedlonglong. |
| a | - | множитель |
| c | - | приращение |
| m | - | модуль |
Если m не равен нулю, а a >= m или c >= m равен true, программа некорректна.
Свойства генератора
Размер состояний linear_congruential_engine равен 1, каждое из них состоит из одного целого числа.
Фактический модуль \(\scriptsize m_0\)m0 определяется следующим образом:
- Если
mне равен нулю, \(\scriptsize m_0\)m0 равенm. - Если
mравен нулю, \(\scriptsize m_0\)m0 равен значениюstd::numeric_limits<result_type>::max()плюс1(это означает, что \(\scriptsize m_0\)m0 не обязательно может быть представлен типомresult_type).
Алгоритм перехода linear_congruential_engine: \(\scriptsize TA(x_i) = (a \cdot x_i + c)\mod m_0\)TA(xi) = (a·xi+c) mod m0.
Алгоритм генерации linear_congruential_engine: \(\scriptsize GA(x_i) = (a \cdot x_i + c)\mod m_0\)GA(xi) = (a·xi+c) mod m0.
Псевдослучайное число, сгенерированное для текущего состояния, также является следующим состоянием.
Предопределённые специализации
Следующие специализации определяют движок случайных чисел с двумя часто используемыми наборами параметров:
Определён в заголовочном файле <random> |
|
|---|---|
| Тип | Определение |
minstd_rand0 (C++11) |
std::linear_congruential_engine<std::uint_fast32_t, 16807,0,2147483647> Открыт в 1969 году Льюисом, Гудманом и Миллером; в 1988 году Парк и Миллер приняли его в качестве «минимального стандарта» |
minstd_rand (C++11) | std::linear_congruential_engine<std::uint_fast32_t, |
Вложенные типы
| Тип | Определение |
|---|---|
result_type |
UIntType |
Члены-данные
|
constexpr UIntType multiplier
[static] |
a (общедоступная статическая константа-член) |
|
constexpr UIntType increment
[static] |
c (общедоступная статическая константа-член) |
|
constexpr UIntType modulus
[static] |
m (общедоступная статическая константа-член) |
|
constexpr UIntType default_seed
[static] |
1u (общедоступная статическая константа-член) |
Функции-члены
Создание и инициализация |
|
| создаёт движок (общедоступная функция-член) |
|
| задаёт текущее состояние движка (общедоступная функция-член) |
|
Генерация |
|
| продвигает состояние движка и возвращает сгенерированное значение (общедоступная функция-член) |
|
| продвигает состояние движка на заданное число шагов (общедоступная функция-член) |
|
Характеристики |
|
|
[static] | возвращает наименьшее возможное значение в диапазоне выходных значений (общедоступная статическая функция-член) |
|
[static] | возвращает наибольшее возможное значение в диапазоне выходных значений (общедоступная статическая функция-член) |
Функции, не являющиеся членами
|
(C++11)(C++11)(удалён в C++20) | сравнивает внутренние состояния двух движков псевдослучайных чисел (функция) |
|
(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