home | help
std::piecew...istribution(3)   C++ Standard Libary  std::piecew...istribution(3)

NAME
     std::piecewise_linear_distribution - std::piecewise_linear_distribution

Synopsis
	Defined in header <random>
	template< class RealType = double >   (since C++11)
	class piecewise_linear_distribution;

	std::piecewise_linear_distribution  produces  random floating-point num-
     bers, which are
	distributed according to a linear probability  density	function  within
     each of the
	several subintervals \(\small{[b_i, b_{i+1})}\)[b
	i, b
	i+1).  The distribution is such that the probability density at each in-
     terval
	boundary is exactly the predefined value \(\small{p_i}\)p
	i.

	The probability density for any \(\small{ b_i \le x < b_{i+1} }\)b
	iaxx<b
	i+1  is  \(\small{p_i\frac{b_{i+1}-x}{b_{i+1}-b_i}   +	 p_{i+1}\frac{x-
     b_i}{b_{i+1}-b_i}
	}\)p
	i

	b
	i+1-x
	b
	i+1-b
	i

	+ p
	i+1

	x-b
	i
	b
	i+1-b
	i

	, where probability densities at interval boundaries \(\small{p_k}\)p
	k are calculated as \(\small{w_k/S}\)w
	k/S where \(\small{S}\)S is the sum of all \(\small{\frac{1}{2}(w_k +
	w_{k+1})(b_{k+1} - b_k)}\)

	1
	2

	(w
	k+w
	k+1)(b
	k+1ab
	k).

	The set of interval boundaries \(\small{b_i}\)b
	i and the set of weights at boundaries \(\small{w_i}\)w
	i are the parameters of this distribution.

	std::piecewise_linear_distribution satisfies all requirements of
	RandomNumberDistribution.

Template parameters
	RealType - The result type generated by the generator. The effect is un-
     defined if
		   this is not one of float, double, or long double.

Member types
	Member type	    Definition
	result_type (C++11) RealType
	param_type  (C++11)  the type of the parameter set, see RandomNumberDis-
     tribution.

Member functions
	constructor   constructs new distribution
	(C++11)       (public member function)
	reset	      resets the internal state of the distribution
	(C++11)       (public member function)

Generation
	operator()    generates the next random number in the distribution
	(C++11)       (public member function)

Characteristics
	intervals     returns the distribution parameters
	densities     (public member function)
	(C++11)
	param	      gets or sets the distribution parameter object
	(C++11)       (public member function)
	min	      returns the minimum potentially generated value
	(C++11)       (public member function)
	max	      returns the maximum potentially generated value
	(C++11)       (public member function)

Non-member functions
	operator==
	operator!=		  compares two distribution objects
	(C++11) 		  (function)
	(C++11)(removed in C++20)
	operator<<		  performs stream input and  output  on  pseudo-
     random number
	operator>>		  distribution
	(C++11) 		  (function template)

Example
     // Run this code

      #include <iomanip>
      #include <iostream>
      #include <map>
      #include <random>
      #include <string>

      int main()
      {
	  std::random_device rd;
	  std::mt19937 gen{rd()};
	  // increase the probability from 0 to 5
	  // remain flat from 5 to 10
	  // decrease from 10 to 15 at the same rate
	  std::vector<double> i{0, 5, 10, 15};
	  std::vector<double> w{0, 1, 1, 0};
	  std::piecewise_linear_distribution<> d{i.begin(), i.end(), w.begin()};

	  std::map<int, int> hist;
	  for (int n{}; n < 1e4; ++n)
	      ++hist[d(gen)];

	  for (auto [x, y] : hist)
	      std::cout << std::setw(2) << std::setfill('0') << x
			<< ' ' << std::string(y / 100, '*') << '\n';
      }

Possible output:
      00 *
      01 ***
      02 ****
      03 ******
      04 *********
      05 *********
      06 *********
      07 **********
      08 *********
      09 **********
      10 *********
      11 *******
      12 ****
      13 ***
      14 *

http://cppreference.com 	   2024.06.10	    std::piecew...istribution(3)

home | help