Именованные требования C++: UniformRandomBitGenerator (начиная с C++11)
Генератор равномерных случайных битов — это функциональный объект, возвращающий значения беззнакового целочисленного типа, при этом каждое значение из диапазона возможных результатов имеет (в идеале) одинаковую вероятность.
Генераторы равномерных случайных битов не предназначены для использования в качестве генераторов случайных чисел: они используются как источник случайных битов (генерируемых большими блоками для повышения эффективности). Любой генератор равномерных случайных битов можно использовать с любым распределением случайных чисел, чтобы получить случайное число (формально — случайную величину).
Требования
Тип G удовлетворяет требованиям UniformRandomBitGenerator, если
| Для заданного
| (до C++20) |
| Выражение | Тип | Требования |
|---|---|---|
G::min() |
G::result_type |
|
G::max() |
G::result_type |
|
g() |
G::result_type |
|
| Выполняются все следующие условия:
| (начиная с C++20) |
Примечания
Все RandomNumberEngine удовлетворяют этому требованию.
Стандартная библиотека
Следующие средства стандартной библиотеки ожидают тип UniformRandomBitGenerator.
|
(до C++17)(C++11) | случайным образом переставляет элементы диапазона (шаблон функции и функциональный объект алгоритма) |
|
(C++20) | |
|
(C++17) | выбирает N случайных элементов из последовательности (шаблон функции и функциональный объект алгоритма) |
|
(C++20) | |
|
(C++11) | равномерно распределяет вещественные значения заданной точности по [0, 1) (шаблон функции) |
|
(C++11) | создает целочисленные значения, равномерно распределенные в диапазоне (шаблон класса) |
|
(C++11) | создает вещественные значения, равномерно распределенные в диапазоне (шаблон класса) |
| все остальные распределения случайных чисел | |
Следующие средства стандартной библиотеки удовлетворяют требованиям UniformRandomBitGenerator, но не удовлетворяют дополнительным требованиям RandomNumberEngine:
|
(C++11) | недетерминированный генератор случайных чисел, использующий аппаратный источник энтропии (класс) |
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применен к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
|
LWG 2154 (P0898R3) | C++11 | не было ясно, должны ли G::min() и G::max()быть константными выражениями[1] | должны |
- До C++20 требование к временной сложности этих выражений формулировалось как «во время компиляции». Эта формулировка неоднозначна, поскольку «временную сложность во время компиляции» можно понимать и как «может быть вычислено во время компиляции», и как «временная сложность может быть определена во время компиляции».
См. также
|
(C++20) | определяет, соответствует ли тип требованиям генератора равномерных случайных битов (концепт) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/UniformRandomBitGenerator