Namespaces
Variants

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

From ru.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.

(до 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. Формулировка неоднозначна, так как "временная сложность времени компиляции" может быть интерпретирована как "может быть вычислена во время компиляции" и "временная сложность может быть определена во время компиляции".

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

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