29 Numerics library [numerics]

29.6 Random number generation [rand]

29.6.8 Random number distribution class templates [rand.dist]

29.6.8.6 Sampling distributions [rand.dist.samp]

29.6.8.6.2 Class template piecewise_­constant_­distribution [rand.dist.samp.pconst]

piecewise_­constant_­distribution Случайное распределение числа производит случайные числаx, b0x<bnравномерно распределяется по каждому подинтервалу в[bi,bi+1) соответствии с функцией плотности вероятности

p(x|b0,,bn,ρ0,,ρn1)=ρi, for bix<bi+1.

Параметрыn+1 распределенияbi, также известные как это распределение , должны удовлетворять соотношению для . Если не указано иное, остальные параметры распределения рассчитываются как: interval boundariesbi<bi+1i=0,,n1n

ρk=wkS(bk+1bk) for k=0,,n1,

в котором значенияwk, обычно известные как the , должны быть неотрицательными, отличными от NaN и бесконечными. Кроме того, соотношение должно занимать: .weights0<S=w0++wn1

template<class RealType = double>
  class piecewise_constant_distribution {
  public:
    // types
    using result_type = RealType;
    using param_type  = unspecified;

    // constructor and reset functions
    piecewise_constant_distribution();
    template<class InputIteratorB, class InputIteratorW>
      piecewise_constant_distribution(InputIteratorB firstB, InputIteratorB lastB,
                                      InputIteratorW firstW);
    template<class UnaryOperation>
      piecewise_constant_distribution(initializer_list<RealType> bl, UnaryOperation fw);
    template<class UnaryOperation>
      piecewise_constant_distribution(size_t nw, RealType xmin, RealType xmax,
                                      UnaryOperation fw);
    explicit piecewise_constant_distribution(const param_type& parm);
    void reset();

    // generating functions
    template<class URBG>
      result_type operator()(URBG& g);
    template<class URBG>
      result_type operator()(URBG& g, const param_type& parm);

    // property functions
    vector<result_type> intervals() const;
    vector<result_type> densities() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
  };

piecewise_constant_distribution();

Effects: Создаетpiecewise_­constant_­distribution объект сn=1, ρ0=1, b0=0иb1=1.

template<class InputIteratorB, class InputIteratorW> piecewise_constant_distribution(InputIteratorB firstB, InputIteratorB lastB, InputIteratorW firstW);

Requires: InputIteratorB иInputIteratorW каждый должен удовлетворять требованиям своегоinput iterator типа. Кроме того, каждыйiterator_­traits<InputIteratorB>​::​value_­type и iterator_­traits<InputIteratorW>​::​value_­typeдолжен обозначать тип, в который можно преобразоватьdouble. ЕслиfirstB == lastB или++firstB == lastB, пустьn=1, w0=1, b0=0иb1=1. В противном случае [firstB,lastB) должен формировать последовательностьb длиныn+1, длина последовательности,w начиная с,firstW должна быть не менееn, и любое значениеwk forkn должно игнорироваться распределением.

Effects: Создаетpiecewise_­constant_­distribution объект с параметрами, указанными выше.

template<class UnaryOperation> piecewise_constant_distribution(initializer_list<RealType> bl, UnaryOperation fw);

Requires: Каждый экземпляр типаUnaryOperation должен бытьfunction object типом возвращаемого значения, в который можно преобразоватьdouble. Более того, double должен быть преобразован в типUnaryOperationединственного параметра.

Effects: Создаетpiecewise_­constant_­distribution объект с параметрами , принятых или вычисленных из следующих значений: Еслиbl.size()<2, пустьn=1, w0=1, b0=0иb1=1. В противном случае позвольте[bl.begin(),bl.end()) сформировать последовательностьb0,,bnи позвольтеwk=fw((bk+1+bk)/2) дляk=0,,n1.

Complexity: Количество обращенийfw не должно превышатьn.

template<class UnaryOperation> piecewise_constant_distribution(size_t nw, RealType xmin, RealType xmax, UnaryOperation fw);

Requires: Каждый экземпляр типаUnaryOperation должен бытьfunction object типом возвращаемого значения, в который можно преобразоватьdouble. Более того, double должен быть преобразован в типUnaryOperationединственного параметра. Еслиnw=0, пустьn=1, иначе пустьn=nw. Отношение0<δ=(xmaxxmin)/n должно сохраняться.

Effects: Создаетpiecewise_­constant_­distribution объект с параметрами, взятыми или вычисленными из следующих значений: Letbk=xmin+kδ fork=0,,nиwk=fw(bk+δ/2) fork=0,,n1.

Complexity: Количество обращенийfw не должно превышатьn.

vector<result_type> intervals() const;

Returns: Объектvector<result_­type> ,size член которого возвращаетсяn+1 иoperator[] член которого возвращаетсяbk при вызове с аргументомk fork=0,,n.

vector<result_type> densities() const;

Returns: Объектvector<result_­type> ,size член которого возвращаетсяn иoperator[] член которого возвращаетсяρk при вызове с аргументомk fork=0,,n1.