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

NAME
     std::piecewise_constant_distribution - std::piecewise_constant_distribution

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

	std::piecewise_constant_distribution produces random floating-point num-
     bers, which
	are uniformly distributed within each of the several subintervals [b
	i, b
	i+1), each with its own weight w
	i. The set of interval boundaries and the set of weights are the parame-
     ters of this
	distribution.

	The probability density for any b
	i ax x <b
	i+1 is

	w
	i
	S (b
	i+1 - b
	i)

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

      int main()
      {
	  std::random_device rd;
	  std::mt19937 gen(rd());
	  // 50% of the time, generate a random number between 0 and 1
	  // 50% of the time, generate a random number between 10 and 15
	  std::vector<double> i {0, 1, 10, 15};
	  std::vector<double> w {1, 0, 1};
	  std::piecewise_constant_distribution<>   d(i.begin(),  i.end(),  w.be-
     gin());

	  std::map<int, int> hist;
	  for (int n {}; 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:2023):

	  * 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)

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

home | help