Namespaces
Variants

std:: linear_congruential_engine

From cppreference.net
Определено в заголовке <random>
template <

class UIntType,
UIntType a,
UIntType c,
UIntType m

> class linear_congruential_engine ;
(начиная с C++11)

linear_congruential_engine — это генератор случайных чисел, основанный на линейном конгруэнтном методе (LCG).

Содержание

Параметры шаблона

UIntType - Тип результата, генерируемый генератором. Поведение не определено, если это не один из unsigned short , unsigned int , unsigned long , или unsigned long long .
a - множитель
c - инкремент
m - модуль

Когда m не равно нулю, если a >= m или c >= m равно true , программа является некорректной.

Свойства генератора

Размер состояния для linear_congruential_engine составляет 1 , каждое состояние состоит из одного целого числа.

Фактический модуль m 0 определяется следующим образом:

  • Если m не равно нулю, m 0 равно m .
  • Если m равно нулю, m 0 равно значению std:: numeric_limits < result_type > :: max ( ) плюс 1 (что означает, что m 0 может не быть представимым как result_type ).

Алгоритм перехода генератора linear_congruential_engine задаётся формулой TA(x i ) = (a·x i +c) mod m 0 .

Алгоритм генерации для linear_congruential_engine имеет вид GA(x i ) = (a·x i +c) mod m 0 .

Псевдослучайное число, сгенерированное с текущим состоянием, также является последующим состоянием.

Предопределенные специализации

Следующие специализации определяют генератор случайных чисел с двумя часто используемыми наборами параметров:

Определено в заголовке <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
(публичная статическая константа-член)

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

Конструкция и инициализация
конструирует движок
(public member function)
устанавливает текущее состояние движка
(public member function)
Генерация
продвигает состояние движка и возвращает сгенерированное значение
(public member function)
продвигает состояние движка на указанное количество шагов
(public member function)
Характеристики
[static]
получает наименьшее возможное значение в выходном диапазоне
(public static member function)
[static]
получает наибольшее возможное значение в выходном диапазоне
(public static member function)

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

(C++11) (C++11) (removed in C++20)
сравнивает внутренние состояния двух генераторов псевдослучайных чисел
(функция)
выполняет потоковый ввод и вывод для генератора псевдослучайных чисел
(шаблон функции)

Пример