31 [[nodiscard]] std::string
Name()
const override;
35 [[nodiscard]]
double P(
const int &k)
const override;
36 [[nodiscard]]
double logP(
const int &k)
const override;
37 [[nodiscard]]
double F(
const int &k)
const override;
38 [[nodiscard]]
double S(
const int &k)
const override;
39 template <std::uniform_random_bit_generator G>
42 template <std::uniform_random_bit_generator G>
43 [[nodiscard]]
static int Variate(
double probability, G &g);
44 template <std::uniform_random_bit_generator G>
47 [[nodiscard]]
inline double Entropy();
66 if (!(probability >= 0.0 && probability <= 1.0))
67 throw std::invalid_argument(
"Bernoulli distribution: probability parameter should in interval [0, 1]");
73 return (k == 0) ?
q : ((k == 1) ?
p : 0);
83 return (k < 0) ? 0.0 : ((k < 1) ?
q : 1);
88 return (k < 0) ? 1.0 : ((k < 1) ?
p : 0.0);
91template <std::uniform_random_bit_generator G>
97template <std::uniform_random_bit_generator G>
100 if (!(probability >= 0.0 && probability <= 1.0))
101 throw std::invalid_argument(
"Bernoulli distribution: probability parameter should be in interval [0, 1]");
105template <std::uniform_random_bit_generator G>
111inline void BernoulliRand::sample(
detail::EngineRef g, std::span<int> outputData)
const
114 for (
int &var : outputData)
117 for (
int &var : outputData)
124 if (
p == 0.0 ||
q == 0.0)
The BernoulliRand class Bernoulli distribution.
Definition bernoulli.hpp:25
double S(const int &k) const override
Definition bernoulli.hpp:86
void SetProbability(double probability)
Definition bernoulli.hpp:64
std::string Name() const override
Definition bernoulli.hpp:59
double Entropy()
Definition bernoulli.hpp:122
int operator()(G &g) const
Definition bernoulli.hpp:92
double logP(const int &k) const override
Definition bernoulli.hpp:76
static int StandardVariate(G &g)
Definition bernoulli.hpp:106
double F(const int &k) const override
Definition bernoulli.hpp:81
double P(const int &k) const override
Definition bernoulli.hpp:71
BernoulliRand(double probability=0.5)
Definition bernoulli.hpp:55
The BinomialDistribution class Abstract class for Binomial distribution.
Definition binomial.hpp:29
double logProb
log(p)
Definition binomial.hpp:36
void SetParameters(int number, double probability)
Definition binomial.hpp:290
double q
probability of failure
Definition binomial.hpp:35
double GetProbability() const noexcept
Definition binomial.hpp:76
double log1mProb
log(q)
Definition binomial.hpp:37
double p
probability of success
Definition binomial.hpp:34
T Variate() const
Uses the engine of this object, so it is not thread-safe for one object; use operator() with one engi...
Definition distribution.hpp:133
std::string toStringWithPrecision(const double a_value, const int n=6) const
Definition distribution.hpp:181
The EngineRef class Non-owning, type-erased reference to any uniform random bit generator.
Definition engine/uniform.hpp:116
std::uint64_t randomBits(G &g, int count)
Definition engine/uniform.hpp:33
Real standardNormal(G &g)
Ziggurat algorithm of Marsaglia and Tsang with 256 layers and an explicit sign bit.
Definition variates.hpp:45
Definition bivariate_normal.hpp:10