Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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
       numbers,	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
       interval
	  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
	  ix<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+1b
	  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
       undefined 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 RandomNum-
       berDistribution.

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)
	  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 <iostream>
	#include <iomanip>
	#include <string>
	#include <map>
	#include <random>

	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.be-
       gin()};

	    std::map<int, int> hist;
	    for(int n=0; n<10000; ++n) {
		++hist[d(gen)];
	    }
	    for(auto p : hist) {
		std::cout << std::setw(2) << std::setfill('0') << p.first << '
       '
			  << std::string(p.second/100,'*') << '\n';
	    }
	}

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

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

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::piecewise_linear_distribution&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help