Именованные требования C++: RandomNumberDistribution (начиная с C++11)
RandomNumberDistribution — это функциональный объект, возвращающий случайные числа в соответствии с функцией плотности вероятности p(x) или дискретным распределением вероятностей P(xi).
Требования
Тип D удовлетворяет требованиям RandomNumberDistribution, если
-
Dудовлетворяет требованиям CopyConstructible -
Dудовлетворяет требованиям CopyAssignable
Пусть
-
T— тип, указанный вD::result_type -
P— тип, указанный вD::param_type, который - удовлетворяет требованиям CopyConstructible
- удовлетворяет требованиям CopyAssignable
- удовлетворяет требованиям EqualityComparable
- имеет конструктор, принимающий те же аргументы, что и каждый конструктор
D, принимающий аргументы, соответствующие параметрам распределения - имеет функцию-член с тем же именем и типом и той же семантикой, что и каждая функция-член
D, возвращающая параметр распределения - объявляет typedef-член
using distribution_type = D; -
d— значение типаD -
xиy— (возможно, константные) значения типаD -
p— (возможно, константное) значение типаP -
g,g1,g2— lvalue типа, удовлетворяющего требованиям UniformRandomBitGenerator -
os— lvalue специализацииstd::basic_ostream -
is— lvalue специализацииstd::basic_istream
Следующие выражения должны быть корректны и иметь указанные эффекты
| Выражение | Тип | Примечания | Сложность |
|---|---|---|---|
D::result_type | T | Арифметический тип | Во время компиляции |
D::param_type | P | Во время компиляции | |
D() | Создаёт распределение, неотличимое от любого другого распределения D, созданного конструктором по умолчанию
| Константная | |
D(p) | Создаёт распределение, неотличимое от D, сконструированного непосредственно из значений, использованных для создания p
| Такая же, как при создании p |
|
d.reset() | void | Сбрасывает внутреннее состояние распределения. Следующий вызов operator() для d не будет зависеть от значений, сгенерированных каким-либо генератором до reset()
| Константная |
x.param() | P | Возвращает p так, что D(p).param() == p
| Не хуже, чем D(p) |
d.param(p) | void | Постусловие: d.param() == p
| Не хуже, чем D(p) |
d(g) | T | Последовательность чисел, возвращаемых при последовательных вызовах этой операции с одним и тем же g, имеет случайное распределение, соответствующее распределению, заданному параметрами d.param()
| Амортизированное постоянное число вызовов g |
d(g,p) | T | Последовательность чисел, возвращаемых при последовательных вызовах этой операции с одним и тем же g, имеет случайное распределение, соответствующее распределению, заданному параметрами p
| Амортизированное постоянное число вызовов g |
x.min() | T | Наибольшая нижняя граница значений, которые могут быть возвращены x’s operator(), определяемая текущими значениями параметров x’s | Константная |
x.max() | T | Наименьшая верхняя граница значений, которые могут быть возвращены x’s operator(), определяемая текущими значениями параметров x’s | Константная |
x == y | bool | Устанавливает отношение эквивалентности. Возвращает true, если x.param() == y.param() и будущие бесконечные последовательности значений, которые будут сгенерированы повторными вызовами x(g1) и y(g2), совпадают при условии, что g1 == g2
| Константная |
x != y | bool | !(x == y) | Константная |
os << x | Ссылка на тип os
| Записывает текстовое представление параметров распределения и внутреннего состояния в os. Флаги форматирования и символ заполнения os остаются неизменными | |
is >> d | Ссылка на тип is
| Восстанавливает параметры распределения и внутреннее состояние по данным, считанным из is. Флаги форматирования is остаются неизменными. Данные должны быть записаны с помощью потока с той же локалью, параметрами шаблона потока CharT и Traits; в противном случае поведение не определено. При обнаружении некорректных входных данных вызывается is.setstate(std::ios::failbit), который может выбросить std::ios_base::failure. В этом случае d не изменяется |
Примечания
Параметры объекта распределения можно изменить либо постоянно с помощью d.param(p), либо только на время одного вызова operator() с помощью d(g,p).
Вызовы константных функций-членов распределения и os << d не влияют на последовательность чисел, получаемых при повторных вызовах d(g).
Стандартная библиотека
Следующие компоненты стандартной библиотеки удовлетворяют требованиям RandomNumberDistribution
|
(C++11) | генерирует целочисленные значения, равномерно распределённые в диапазоне (шаблон класса) |
|
(C++11) | генерирует вещественные значения, равномерно распределённые в диапазоне (шаблон класса) |
|
(C++11) | генерирует значения bool в соответствии с распределением Бернулли (класс) |
|
(C++11) | генерирует целочисленные значения в соответствии с биномиальным распределением (шаблон класса) |
|
(C++11) | генерирует целочисленные значения в соответствии с отрицательным биномиальным распределением (шаблон класса) |
|
(C++11) | генерирует целочисленные значения в соответствии с геометрическим распределением (шаблон класса) |
|
(C++11) | генерирует целочисленные значения в соответствии с распределением Пуассона (шаблон класса) |
|
(C++11) | генерирует вещественные значения в соответствии с экспоненциальным распределением (шаблон класса) |
|
(C++11) | генерирует вещественные значения в соответствии с гамма-распределением (шаблон класса) |
|
(C++11) | генерирует вещественные значения в соответствии с распределением Вейбулла (шаблон класса) |
|
(C++11) | генерирует вещественные значения в соответствии с распределением экстремальных значений (шаблон класса) |
|
(C++11) | генерирует вещественные значения в соответствии с стандартным нормальным (гауссовым) распределением (шаблон класса) |
|
(C++11) | генерирует вещественные значения в соответствии с логнормальным распределением (шаблон класса) |
|
(C++11) | генерирует вещественные значения в соответствии с распределением хи-квадрат (шаблон класса) |
|
(C++11) | генерирует вещественные значения в соответствии с распределением Коши (шаблон класса) |
|
(C++11) | генерирует вещественные значения в соответствии с F-распределением Фишера (шаблон класса) |
|
(C++11) | генерирует вещественные значения в соответствии с t-распределением Стьюдента (шаблон класса) |
|
(C++11) | генерирует целочисленные значения в соответствии с дискретным распределением (шаблон класса) |
|
(C++11) | генерирует вещественные значения, распределённые на заданных подынтервалах с постоянной плотностью (шаблон класса) |
|
(C++11) | генерирует вещественные значения, распределённые на заданных подынтервалах с линейной плотностью (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/RandomNumberDistribution