Именованные требования C++: RandomNumberEngine (начиная с 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 | значение типа unsignedlonglong |
os | lvalue, тип которого является специализацией std::basic_ostream |
is | lvalue, тип которого является специализацией std::basic_istream |
n | размер состояния E |
TA | алгоритм перехода E |
GA | алгоритм генерации E |
| Выражение | Возвращаемый тип | Семантика | Сложность |
|---|---|---|---|
E() | Н/Д | Создаёт генератор с тем же начальным состоянием, что и у всех остальных генераторов типа E, созданных конструктором по умолчанию. | \(\scriptsize O(n)\)O(n) |
E(x) | Создаёт генератор, равный x. | \(\scriptsize O(n)\)O(n) | |
E(s) | Создаёт генератор, начальное состояние которого определяется s. | \(\scriptsize O(n)\)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 с ei на ei+1 (то есть TA(ei)) и возвращает GA(ei). | амортизированная константная |
e.discard(z) | void | Изменяет состояние e с ei на ei+z любым способом, эквивалентным z последовательным вызовам e(). | не хуже, чем сложность z последовательных вызовов e() |
x == y | bool | Для любого положительного целого числа i, если i-й последовательный вызов x() и y() возвращает одно и то же значение, возвращает true. В противном случае возвращает false. | \(\scriptsize O(n)\)O(n) |
x != y | bool |
!(x == y) | \(\scriptsize O(n)\)O(n) |
os << x | decltype(os)& | Устанавливает fmtflags в std::ios_base::dec | std::ios_base::left, а символ заполнения — в пробел, и записывает в os текстовое представление текущего состояния x.Постусловие: fmtflags и символ заполнения для | \(\scriptsize O(n)\)O(n) |
is >> v | decltype(is)& | Устанавливает fmtflags в std::ios_base::dec и считывает из is текстовое представление текущего состояния v. Если встречаются некорректные входные данные, гарантируется, что состояние v не изменится в результате операции, и вызывается is.setstate(std::ios_base::failbit) (который может выбросить std::ios_base::failure).Предусловие:
Постусловие: fmtflags для | \(\scriptsize O(n)\)O(n) |
Стандартная библиотека
Следующие средства стандартной библиотеки удовлетворяют требованиям RandomNumberEngine:
|
(C++11) | реализует линейный конгруэнтный алгоритм (шаблон класса) |
|
(C++11) | реализует алгоритм вихрь Мерсенна (шаблон класса) |
|
(C++11) | реализует алгоритм вычитания с переносом (запаздывающий генератор Фибоначчи) (шаблон класса) |
|
(C++26) | параллелизуемый генератор на основе счётчика (шаблон класса) |
|
(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/cpp/named_req/RandomNumberEngine