Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Generates a Bernoulli distribution.
class bernoulli_distribution
{
public:
// types
typedef bool result_type;
struct param_type;
// constructors and reset functions
explicit bernoulli_distribution(double p = 0.5);
explicit bernoulli_distribution(const param_type& parm);
void reset();
// generating functions
template<class URNG>
result_type operator()(URNG& gen);
template<class URNG>
result_type operator()(URNG& gen, const param_type& parm);
// property functions
double p() const;
param_type param() const;
void param(const param_type& parm);
result_type min() const;
result_type max() const;
};
Remarks
The class describes a distribution that produces values of type bool, distributed according to the Bernoulli distribution discrete probability function. The following table links to articles about individual members.
bernoulli_distribution::p |
bernoulli_distribution::param |
|
bernoulli_distribution::operator() |
The property member p() returns the currently stored distribution parameter value p.
For more information about distribution classes and their members, see <random>.
For detailed information about the Bernoulli distribution discrete probability function, see the Wolfram MathWorld article Bernoulli Distribution.
Example
// compile with: /EHsc /W4
#include <random>
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
void test(const double p, const int s) {
// uncomment to use a non-deterministic seed
// std::random_device rd;
// std::mt19937 gen(rd());
std::mt19937 gen(1729);
std::bernoulli_distribution distr(p);
std::cout << "p == " << distr.p() << std::endl;
// generate the distribution as a histogram
std::map<bool, int> histogram;
for (int i = 0; i < s; ++i) {
++histogram[distr(gen)];
}
// print results
std::cout << "Histogram for " << s << " samples:" << std::endl;
for (const auto& elem : histogram) {
std::cout << std::boolalpha << std::setw(5) << elem.first << ' ' << std::string(elem.second, ':') << std::endl;
}
std::cout << std::endl;
}
int main()
{
double p_dist = 0.5;
int samples = 100;
std::cout << "Use CTRL-Z to bypass data entry and run using default values." << std::endl;
std::cout << "Enter a double value for p distribution (where 0.0 <= p <= 1.0): ";
std::cin >> p_dist;
std::cout << "Enter an integer value for a sample count: ";
std::cin >> samples;
test(p_dist, samples);
}
Output
Use CTRL-Z to bypass data entry and run using default values.
Enter a double value for p distribution (where 0.0 <= p <= 1.0): .45
Enter an integer value for a sample count: 100
p == 0.45
Histogram for 100 samples:
false :::::::::::::::::::::::::::::::::::::::::::::::::::::
true :::::::::::::::::::::::::::::::::::::::::::::::
Requirements
Header: <random>
Namespace: std