Namespaces
Variants

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

From cppreference.net
C++ named requirements

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

Универсальные генераторы случайных битов не предназначены для использования в качестве генераторов случайных чисел: они используются как источник случайных битов (генерируемых оптом, для эффективности). Любой универсальный генератор случайных битов может быть подключен к любому распределению случайных чисел для получения случайного числа (формально, случайной величины).

Содержание

Требования

Тип G удовлетворяет требованиям UniformRandomBitGenerator если

Дано g — значение типа G , все следующие условия должны выполняться:

  • G::result_type является корректным и обозначает беззнаковый целочисленный тип.
  • Следующие выражения должны быть корректными и иметь указанные эффекты:
(до C++20)
Выражение Тип Требования
G :: min ( ) G::result_type
  • Возвращает наименьшее значение, которое может вернуть G 's operator ( ) .
  • Результат строго меньше, чем G :: max ( ) .
  • Выражение должно быть константным выражением.
G :: max ( ) G::result_type
  • Возвращает наибольшее значение, которое может вернуть G 's operator ( ) .
  • Результат строго больше, чем G::min() .
  • Выражение должно быть константным выражением.
g ( ) G::result_type
  • Возвращает значение в закрытом интервале [ G :: min ( ) , G :: max ( ) ] .
  • Имеет амортизированную постоянную сложность.

Все следующие условия удовлетворены:

(since C++20)

Примечания

Все RandomNumberEngine s удовлетворяют этому требованию.

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

Следующие средства стандартной библиотеки ожидают тип UniformRandomBitGenerator .

(until C++17) (C++11)
случайно переупорядочивает элементы в диапазоне
(шаблон функции)
(C++17)
выбирает N случайных элементов из последовательности
(шаблон функции)
равномерно распределяет вещественные значения заданной точности в диапазоне [ 0 , 1 )
(шаблон функции)
генерирует целочисленные значения, равномерно распределенные в диапазоне
(шаблон класса)
генерирует вещественные значения, равномерно распределенные в диапазоне
(шаблон класса)
все остальные распределения случайных чисел

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

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

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 2154
( P0898R3 )
C++11 было неясно, требуются ли G :: min ( ) и G :: max ( )
быть константными выражениями [1]
требуется
  1. Требование временной сложности для этих выражений было "время компиляции" до C++20. Формулировка неоднозначна, так как "временная сложность времени компиляции" может быть интерпретирована как "может быть вычислена во время компиляции" и "временная сложность может быть определена во время компиляции".

Смотрите также

определяет, что тип соответствует требованиям генератора равномерно распределенных случайных битов
(концепт)