Spec-Zone.ru › C++

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,
48271,0,2147483647>
Более новый «минимальный стандарт», рекомендованный Парком, Миллером и Стокмайером в 1993 году

Вложенные типы

Тип Определение
result_type UIntType

Члены-данные

constexpr UIntType multiplier
[static]
a
(общедоступная статическая константа-член)
constexpr UIntType increment
[static]
c
(общедоступная статическая константа-член)
constexpr UIntType modulus
[static]
m
(общедоступная статическая константа-член)
constexpr UIntType default_seed
[static]
1u
(общедоступная статическая константа-член)

Функции-члены

Создание и инициализация
(конструктор)
создаёт движок
(общедоступная функция-член)
seed
задаёт текущее состояние движка
(общедоступная функция-член)
Генерация
operator()
продвигает состояние движка и возвращает сгенерированное значение
(общедоступная функция-член)
discard
продвигает состояние движка на заданное число шагов
(общедоступная функция-член)
Характеристики
min
[static]
возвращает наименьшее возможное значение в диапазоне выходных значений
(общедоступная статическая функция-член)
max
[static]
возвращает наибольшее возможное значение в диапазоне выходных значений
(общедоступная статическая функция-член)

Функции, не являющиеся членами

operator==operator!=
(C++11)(C++11)(удалён в C++20)
сравнивает внутренние состояния двух движков псевдослучайных чисел
(функция)
operator<<operator>>
(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

Spec-Zone.ru

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