Требования к именованным типам C++: RandomNumberEngine (с C++11)
Движок случайных чисел — это объект-функция, возвращающий значения целых беззнаковых чисел, при этом каждое значение в диапазоне возможных результатов имеет (в идеале) равную вероятность.
Любой движок случайных чисел также является UniformRandomBitGenerator и, следовательно, может быть подключен к любому распределению случайных чисел для получения случайного числа (формально — случайной величины).
Требования
Тип E, удовлетворяющий UniformRandomBitGenerator, также будет удовлетворять RandomNumberEngine, если, учитывая
-
T, тип, указанныйE::result_type -
s, значение типаT -
e, значение типаE -
v, lvalue типаE -
xиy, возможно константные значения типаE -
q, lvalue некоторого типа, удовлетворяющего SeedSequence -
z, значение типаunsigned long long -
os, поток вывода -
is, поток ввода
следующие выражения допустимы и имеют указанные эффекты:
| Выражение | Тип возвращаемого значения | Требования |
|---|---|---|
E() |
Создает движок с тем же состоянием, что и все другие движки типа E, созданные по умолчанию. |
|
E(x) |
Создает движок с тем же состоянием, что и x. |
|
E(s) |
Создаёт движок, начальное состояние которого определяется целым числом s. |
|
E(q) |
Создает движок, начальное состояние которого определяется одним вызовом q.generate. |
|
e.seed() |
void |
Устанавливает e == E(). |
e.seed(s) |
void |
Устанавливает e == E(s). |
e.seed(q) |
void |
Устанавливает e == E(q). |
e() |
T |
Возвращает значение в замкнутом интервале [E::min(), E::max()]. Имеет амортизированную постоянную сложность. |
e.discard(z) |
void |
Перемещает состояние e так, как будто было выполнено z последовательных вызовов e(). |
x == y |
bool |
true если x и y находятся в одном состоянии (таким образом, повторные последующие вызовы x() и y() будут генерировать одинаковые последовательности). В противном случае, false. |
x != y |
bool |
!(x == y) |
os << x |
decltype(os)& |
Записывает в os текстовое представление текущего состояния x. В выводе соседние числа разделены одним или несколькими пробелами. Если os не установлен флаг форматирования ios_base::dec|ios_base::left, поведение может быть неопределенным. |
is >> v |
decltype(is)& |
Считывает из is текстовое представление текущего состояния v таким образом, что если это состояние ранее было записано через os << x, то x == v. Если is не установлен флаг форматирования ios_base::dec, поведение может быть неопределенным. |
Стандартная библиотека
Следующие средства стандартной библиотеки удовлетворяют RandomNumberEngine:
|
(C++11)
|
реализует линейный конгруэнтный алгоритм (шаблон класса) |
|
(C++11)
|
реализует алгоритм Мерсенна-Твистера (шаблон класса) |
|
(C++11)
|
реализует алгоритм вычитания с переносом (задержанный Фибоначчи) (шаблон класса) |
|
(C++11)
|
отбрасывает некоторые результаты работы движка случайных чисел (шаблон класса) |
|
(C++11)
|
упаковывает выход движка случайных чисел в блоки заданного количества бит (шаблон класса) |
|
(C++11)
|
предоставляет выход движка случайных чисел в другом порядке (шаблон класса) |
Следующие средства стандартной библиотеки удовлетворяют UniformRandomBitGenerator, но не RandomNumberEngine:
|
(C++11)
|
недетерминированный генератор случайных чисел, использующий источник аппаратной энтропии (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/RandomNumberEngine