...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::compute::discrete_distribution — Produces random integers on the interval [0, n), where probability of each integer is given by the weight of the ith integer divided by the sum of all weights.
// In header: <boost/compute/random/discrete_distribution.hpp> template<typename IntType = uint_> class discrete_distribution { public: // types typedef IntType result_type; // construct/copy/destruct template<typename InputIterator> discrete_distribution(InputIterator, InputIterator); ~discrete_distribution(); // public member functions result_type n() const; ::std::vector< double > probabilities() const; template<typename OutputIterator, typename Generator> void generate(OutputIterator, OutputIterator, Generator &, command_queue &); };
The following example shows how to setup a discrete distribution to produce 0 and 1 with equal probability
discrete_distribution
public
construct/copy/destructtemplate<typename InputIterator> discrete_distribution(InputIterator first, InputIterator last);
Creates a new discrete distribution with weights given by the range [first
, last
)
~discrete_distribution();Destroys the
discrete_distribution
object. discrete_distribution
public member functionsresult_type n() const;Returns the value of n.
::std::vector< double > probabilities() const;Returns the probabilities.
template<typename OutputIterator, typename Generator> void generate(OutputIterator first, OutputIterator last, Generator & generator, command_queue & queue);
Generates uniformily distributed integers and stores them to the range [first
, last
).