random number distribution (Обычно сокращенноdistribution) d типаD является функция объекта возвращение значения, которые распределены в соответствии с ассоциированным математическимprobability density function p(z) или в соответствии с ассоциированнымdiscrete probability function P(zi). Спецификация распределения определяет связанную с ним функцию вероятности p(z) илиP(zi).
Соответствующая функция вероятности обычно выражается с помощью определенных поставляемых извне величин, известных какparameters of the distribution. Такие параметры распределения идентифицируются в этом контексте путем написания, например, p(z|a,b) илиP(zi|a,b)для обозначения определенных параметров, или путем написания, например, p(z |{p}) илиP(zi|{p}), для обозначения параметров распределения,p взятых в целом.
КлассD удовлетворяет требованиям a,random number distribution если выражения, показанные в таблице105 , действительны и имеют указанную семантику, а ifD и связанные с ним типы также удовлетворяют всем другим требованиям этого раздела[rand.req.dist]. В этой таблице и в этом разделе
a)T тип, названный Dассоциированнымresult_type;
b)P тип, названный Dассоциированнымparam_type;
c)d это значениеD, а такжеx иy являются (возможноconst) значенияD;
d)glb иlub являются значениямиT соответственно, соответствующими наибольшей нижней границе и наименьшей верхней границе значений, потенциально возвращаемыхd'soperator(), как определено текущими значениямиdпараметров' s;
e)p является (возможноconst) значениемP;
f)g,g1иg2 являются l значениями типа, удовлетворяющими требованиям auniform random bit generator;
g)os - lvalue типа некоторой специализации шаблона класса basic_ostream<charT,traits>; а также
h)is - lvalue типа некоторой специализации шаблона класса basic_istream<charT,traits>;
гдеcharT иtraits ограничены в соответствии с пунктами[strings] и[input.output].
Выражение | Тип возврата | До / после состояния | Сложность |
D::result_type | T | T этоarithmetic type. | время компиляции |
D::param_type | P | время компиляции | |
D() | Создает распределение, поведение которого неотличимо от поведения любого другого вновь созданного по умолчанию распределения типаD. | постоянный | |
D(p) | Создает распределение, поведение которого неотличимо от поведения вновь созданного распределения, непосредственно из значений, используемых для построенияp. | такая же, какpи конструкция | |
d.reset() | void | Последующее использованиеd не зависит от значений, созданных каким-либо механизмом перед вызовомreset. | постоянный |
x.param() | P | Возвращает такое значение p , чтоD(p).param() == p. | не хуже, чем сложностьD(p) |
d.param(p) | void | Postconditions:d.param() == p. | не хуже, чем сложностьD(p) |
d(g) | T | Сp=d.param(), последовательность чисел, возвращаемая последовательными вызовами одного и того же объектаg , случайным образом распределяется в соответствии с ассоциированной функциейp(z |{p}) или P(zi|{p}). | амортизируемое постоянное количество вызововg |
d(g,p) | T | Последовательность чисел, возвращаемая последовательными вызовами однихg и тех же объектов,p случайным образом распределяется в соответствии с ассоциированной функциейp(z |{p}) или P(zi|{p})функцией. | амортизируемое постоянное количество вызововg |
x.min() | T | Возвратglb. | постоянный |
x.max() | T | Возвратlub. | постоянный |
x == y | bool | Этот оператор является отношением эквивалентности. Возвращаетtrue ifx.param() == y.param() иS1=S2, гдеS1 иS2 - бесконечные последовательности значений, которые будут генерироваться, соответственно, повторными вызовами в будущемx(g1) иy(g2) всякий разg1 == g2. В противном случае возвращаетсяfalse. | постоянный |
x != y | bool | !(x == y). | так же, какx == y. |
os << x | ссылка на типos | Записывает вos текстовое представление параметры и дополнительные внутренние данныеx. И символ - заполнитель не изменяются. Postconditions: os.fmtflags | |
is >> d | ссылка на типis | Восстанавливается изis параметров и дополнительных внутренних данных lvalued. Если обнаружен неправильный ввод, гарантирует, чтоd операция и вызовы не изменят егоis.setstate(ios::failbit) (что может вызвать throwios::failure ([iostate.flags])). Requires:is обеспечивает текстовое представление , которое было ранее написанным используяos которого пронизана локаль и чьи аргументы шаблона специализации типа в charT иtraits были такими же , как теis. Неизменны. Postconditions: is.fmtflags |
Последовательность чисел, полученная при повторных вызовах,d(g) должна быть независимой от любого вызова os << d или какой-либоconst функции-членаD между любыми вызовамиd(g).
Если текстовое представление написано с использованиемos << x и это представление восстанавливается в тот же или другой объектy того же типа с использованиемis >> y, повторные вызовыy(g) должны производить ту же последовательность чисел, что и повторные вызовыx(g).
Не указано,D::param_type объявлен ли он как (вложенный)class или черезtypedef. В этом подпункте[rand]объявленияD::param_type используются в формеtypedefs только для удобства изложения.
Для каждого из конструкторов,D принимающих аргументы, соответствующие параметрам распределения, P должен быть соответствующий конструктор, подчиняющийся тем же требованиям и принимающий аргументы, идентичные по количеству, типу и значениям по умолчанию. Более того, для каждой из функций-членовD этих возвращаемых значений, соответствующих параметрам распределения, P должна быть соответствующая функция-член с идентичным именем, типом и семантикой.