std::piecewise_constant_distribution - cppreference.com

From cppreference.com

template<classRealType=double>classpiecewise_constant_distribution;(since C++11)std::piecewise_constant_distribution produces random floating-point numbers, which are uniformly distributed within each of the several subintervals [bi, bi+1), each with its own weight wi. The set of interval boundaries and the set of weights are the parameters of this distribution.

The probability density for any bi ≤ x <bi+1 is

wiS (bi+1 - bi)

, where S is the sum of all weights.

std::piecewise_constant_distribution

satisfies all requirements of

RandomNumberDistribution

.

Template parameters

RealType - The result type generated by the generator. The effect is undefined if this is not one of float, double, or longdouble. Member types

Member type Definition result_type(C++11)RealTypeparam_typethe type of the parameter set, see

RandomNumberDistribution

. Member functions

(constructor)

constructs new distribution
(public member function)

[edit]

reset

resets the internal state of the distribution
(public member function)

[edit]

Generation

operator()

generates the next random number in the distribution
(public member function)

[edit]

Characteristics

intervalsdensities

returns the distribution parameters
(public member function)

[edit]

param

gets or sets the distribution parameter object
(public member function)

[edit]

min

returns the minimum potentially generated value
(public member function)

[edit]

max

returns the maximum potentially generated value
(public member function)

[edit]

Non-member functions

Example

Run this code

#include<iostream>#include<map>#include<random>#include<string>intmain(){std::random_devicerd;std::mt19937gen(rd());// 50% of the time, generate a random number between 0 and 1// 50% of the time, generate a random number between 10 and 15std::vector<double>i{0,1,10,15};std::vector<double>w{1,0,1};std::piecewise_constant_distribution<>d(i.begin(),i.end(),w.begin());std::map<int,int>hist;for(intn{};n<1e4;++n)++hist[d(gen)];for(std::cout<<std::hex<<std::uppercase;auto[x,y]:hist)std::cout<<x<<' '<<std::string(y/100,'*')<<'\n';}Possible output:

0 ************************************************** A ********** B ********* C ********* D ********** E ********* References

C++23 standard (ISO/IEC 14882:2024):

28.5.9.6.2 Class template piecewise_constant_distribution [rand.dist.samp.pconst] (p: 1421-1422)

C++20 standard (ISO/IEC 14882:2020):

29.6.9.6.2 Class template piecewise_constant_distribution [rand.dist.samp.pconst] (p: 1207-1208)

C++17 standard (ISO/IEC 14882:2017):

29.6.8.6.2 Class template piecewise_constant_distribution [rand.dist.samp.pconst] (p: 1098-1100)

C++14 standard (ISO/IEC 14882:2014):

26.5.8.6.2 Class template piecewise_constant_distribution [rand.dist.samp.pconst] (p: 962-964)

C++11 standard (ISO/IEC 14882:2011):

26.5.8.6.2 Class template piecewise_constant_distribution [rand.dist.samp.pconst] (p: 955-957)