Spec-Zone.ru › C++

Именованные требования C++: UniformRandomBitGenerator (начиная с C++11)

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

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

Требования

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

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

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

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

  • G моделирует uniform_random_bit_generator.
  • std::invoke_result_t<G&> является беззнаковым целочисленным типом.
  • G предоставляет вложенное имя typedef result_type, обозначающее тот же тип, что и std::invoke_result_t<G&>.
(начиная с C++20)

Примечания

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

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

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

random_shuffleshuffle
(до C++17)(C++11)
случайным образом переставляет элементы диапазона
(шаблон функции и функциональный объект алгоритма)
ranges::shuffle
(C++20)
sample
(C++17)
выбирает N случайных элементов из последовательности
(шаблон функции и функциональный объект алгоритма)
ranges::sample
(C++20)
generate_canonical
(C++11)
равномерно распределяет вещественные значения заданной точности по [0, 1)
(шаблон функции)
uniform_int_distribution
(C++11)
создает целочисленные значения, равномерно распределенные в диапазоне
(шаблон класса)
uniform_real_distribution
(C++11)
создает вещественные значения, равномерно распределенные в диапазоне
(шаблон класса)
все остальные распределения случайных чисел

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

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

Отчеты об ошибках

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

DR Применен к Опубликованное поведение Корректное поведение
LWG 2154
(P0898R3)
C++11 не было ясно, должны ли G::min() и G::max()
быть константными выражениями[1]
должны
  1. До C++20 требование к временной сложности этих выражений формулировалось как «во время компиляции». Эта формулировка неоднозначна, поскольку «временную сложность во время компиляции» можно понимать и как «может быть вычислено во время компиляции», и как «временная сложность может быть определена во время компиляции».

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/UniformRandomBitGenerator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API