29 Numerics library [numerics]

29.6 Random number generation [rand]

29.6.1 Requirements [rand.req]

29.6.1.6 Random number distribution requirements [rand.req.dist]

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]. В этой таблице и в этом разделе

  1. a)T тип, названный Dассоциированнымresult_­type;

  2. b)P тип, названный Dассоциированнымparam_­type;

  3. c)d это значениеD, а такжеx иy являются (возможноconst) значенияD;

  4. d)glb иlub являются значениямиT соответственно, соответствующими наибольшей нижней границе и наименьшей верхней границе значений, потенциально возвращаемыхd'soperator(), как определено текущими значениямиdпараметров' s;

  5. e)p является (возможноconst) значениемP;

  6. f)g,g1иg2 являются l значениями типа, удовлетворяющими требованиям auniform random bit generator;

  7. g)os - lvalue типа некоторой специализации шаблона класса basic_­ostream<charT,traits>; а также

  8. h)is - lvalue типа некоторой специализации шаблона класса basic_­istream<charT,traits>;

гдеcharT иtraits ограничены в соответствии с пунктами[strings] и[input.output].

Таблица105 - Требования к распределению случайных чисел
ВыражениеТип возвратаДо / после состоянияСложность
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 должны удовлетворять требованиямCopyConstructible иCopyAssignable типам.

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

P должен удовлетворять требованияCopyConstructible, CopyAssignableи EqualityComparable типов.

Для каждого из конструкторов,D принимающих аргументы, соответствующие параметрам распределения, P должен быть соответствующий конструктор, подчиняющийся тем же требованиям и принимающий аргументы, идентичные по количеству, типу и значениям по умолчанию. Более того, для каждой из функций-членовD этих возвращаемых значений, соответствующих параметрам распределения, P должна быть соответствующая функция-член с идентичным именем, типом и семантикой.

P иметь декларацию по форме

using distribution_type =  D;