C++ named requirements: RandomNumberEngine (since C++11)
Генератор случайных чисел — это функциональный объект, возвращающий беззнаковые целочисленные значения, причём каждое значение в диапазоне возможных результатов имеет (в идеале) равную вероятность.
Любой генератор случайных чисел также является UniformRandomBitGenerator , и поэтому может быть подключен к любому распределению случайных чисел для получения случайного числа (формально, случайной величины).
Требования
Тип удовлетворяет требованиям RandomNumberEngine если он удовлетворяет требованиям UniformRandomBitGenerator и, при заданных следующих типах и значениях, выполняются семантические и сложностные требования, приведенные в таблице ниже:
| Тип | Определение |
E
|
тип RandomNumberEngine |
T
|
E::result_type
|
| Значение | Определение |
| e |
значение типа
E
|
| v |
lvalue типа
E
|
| x , y |
значения типа (возможно const-квалифицированного)
E
|
| s |
значение типа
T
|
| q | lvalue SeedSequence |
| z | значение типа unsigned long long |
| os | lvalue, тип которого является специализацией std::basic_ostream |
| is | lvalue, тип которого является специализацией std::basic_istream |
| n |
размер
состояния
E
|
| TA |
алгоритм перехода
для
E
|
| GA |
алгоритм генерации
для
E
|
| Выражение | Тип возвращаемого значения | Семантика | Сложность |
|---|---|---|---|
| E ( ) | N/A |
Создает движок с таким же начальным состоянием, как и все остальные движки типа
E
, созданные конструктором по умолчанию.
|
O(n) |
| E ( x ) | Создает механизм, который сравнивается как равный x . | O(n) | |
| E ( s ) | Создает механизм, начальное состояние которого определяется s . | O(n) | |
| E ( q ) |
Создает механизм, начальное состояние которого определяется одним вызовом
q.generate
.
|
такая же, как сложность
q.generate
, вызванного на последовательности длиной
n
|
|
| e. seed ( ) | void | Постусловие: e == E ( ) . | эквивалентно E ( ) |
| e. seed ( s ) | void | Постусловие: e == E ( s ) . | эквивалентно E ( s ) |
| e. seed ( q ) | void | Постусловие: e == E ( q ) . | эквивалентно E ( q ) |
| e ( ) |
T
|
Переводит состояние
e
из
e
i
в
e
i+1
(т.е.
TA
(
e
i
)
) и возвращает
GA
(
e
i
)
.
|
амортизированная константа |
| e. discard ( z ) | void |
Переводит состояние
e
из
e
i
в
e
i+z
любым способом, эквивалентным
z
последовательным вызовам
e
(
)
.
|
не хуже сложности z последовательных вызовов e ( ) |
| x == y | bool | Для всех положительных целых чисел i , если i -е последовательные вызовы x ( ) и y ( ) возвращают одинаковое значение, возвращает true . В противном случае возвращает false . | O(n) |
| x ! = y | bool | ! ( x == y ) | O(n) |
| os << x | decltype ( os ) & |
С установленными флагами форматирования
std::
ios_base
::
dec
|
std::
ios_base
::
left
и символом заполнения, установленным в пробел, записывает в
os
текстовое представление текущего состояния
x
.
Постусловие: флаги форматирования os и символ заполнения остаются такими же, как и до операции. |
O(n) |
| is >> v | decltype ( is ) & |
При установленных флагах формата
std::
ios_base
::
dec
, считывает из
is
текстовое представление текущего состояния
v
. При обнаружении некорректного ввода гарантирует, что состояние
v
останется неизменным после операции и вызывает
is.
setstate
(
std::
ios_base
::
failbit
)
(что может вызвать исключение
std::ios_base::failure
).
Предусловие: is предоставляет текстовое представление, которое ранее было записано с использованием выходного потока pr , удовлетворяющего всем следующим условиям:
Постусловие: is флаги формата остаются такими же, как и до операции. |
O(n) |
Стандартная библиотека
Следующие средства стандартной библиотеки удовлетворяют требованиям RandomNumberEngine :
|
(C++11)
|
реализует
линейный конгруэнтный
алгоритм
(шаблон класса) |
|
(C++11)
|
реализует
алгоритм Вихрь Мерсенна
(шаблон класса) |
|
(C++11)
|
реализует алгоритм вычитания с переносом (
запаздывающий Фибоначчи
)
(шаблон класса) |
|
(C++26)
|
параллелизуемый генератор на основе счетчика
(шаблон класса) |
|
(C++11)
|
отбрасывает часть вывода генератора случайных чисел
(шаблон класса) |
|
(C++11)
|
упаковывает вывод генератора случайных чисел в блоки заданного количества бит
(шаблон класса) |
|
(C++11)
|
выводит результат генератора случайных чисел в другом порядке
(шаблон класса) |
Следующие средства стандартной библиотеки удовлетворяют требованиям UniformRandomBitGenerator , но не RandomNumberEngine :
|
(C++11)
|
недетерминированный генератор случайных чисел, использующий аппаратный источник энтропии
(класс) |