Namespaces
Variants

C++ named requirements: RandomNumberEngine (since C++11)

From cppreference.net
C++ named requirements

Генератор случайных чисел — это функциональный объект, возвращающий беззнаковые целочисленные значения, причём каждое значение в диапазоне возможных результатов имеет (в идеале) равную вероятность.

Любой генератор случайных чисел также является 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
**Примечание:** В данном фрагменте HTML весь текст уже находится внутри тегов ` `, `
` или является C++ специфическими терминами, поэтому переводу подлежит только математическое обозначение O(n), но оно также является техническим термином и не переводится. Весь остальной текст сохраняется в оригинальном виде согласно требованиям.
Выражение Тип возвращаемого значения Семантика Сложность
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. getloc ( ) == pr. getloc ( ) равно true .
  • std:: is_same < decltype ( is ) :: char_type ,
    decltype ( pr ) :: char_type > :: value
    равно true .
  • std:: is_same < decltype ( is ) :: traits_type ,
    decltype ( pr ) :: traits_type > :: value
    равно true .

Постусловие: is флаги формата остаются такими же, как и до операции.

O(n)

Стандартная библиотека

Следующие средства стандартной библиотеки удовлетворяют требованиям RandomNumberEngine :

реализует линейный конгруэнтный алгоритм
(шаблон класса)
реализует алгоритм Вихрь Мерсенна
(шаблон класса)
реализует алгоритм вычитания с переносом ( запаздывающий Фибоначчи )
(шаблон класса)
параллелизуемый генератор на основе счетчика
(шаблон класса)
отбрасывает часть вывода генератора случайных чисел
(шаблон класса)
упаковывает вывод генератора случайных чисел в блоки заданного количества бит
(шаблон класса)
выводит результат генератора случайных чисел в другом порядке
(шаблон класса)

Следующие средства стандартной библиотеки удовлетворяют требованиям UniformRandomBitGenerator , но не RandomNumberEngine :

недетерминированный генератор случайных чисел, использующий аппаратный источник энтропии
(класс)