32 #ifndef MCKL_RANDOM_BERNOULLI_DISTRIBUTION_HPP 33 #define MCKL_RANDOM_BERNOULLI_DISTRIBUTION_HPP 44 return p >= 0 && p <= 1;
47 template <std::
size_t K,
typename IntType,
typename RNGType>
49 RNGType &rng, std::size_t n, IntType *r,
double p)
54 for (std::size_t i = 0; i != n; ++i) {
64 Bernoulli, bernoulli, InType,
double, p)
66 template <
typename IntType>
73 Bernoulli, bernoulli, IntType,
double, p, 0.5)
84 template <
typename RNGType>
89 return u01(rng) < param.
p() ? 1 : 0;
97 #endif // MCKL_RANDOM_BERNOULLI_DISTRIBUTION_HPP Standard uniform distribution on [0, 1)
bool bernoulli_distribution_check_param(double p)
#define MCKL_DEFINE_RANDOM_DISTRIBUTION_RAND(Name, T)
RealType u01(UIntType u)
Convert uniform unsigned integers to floating points within [0, 1].
void bernoulli_distribution_impl(RNGType &rng, std::size_t n, IntType *r, double p)
void u01_co_distribution(RNGType &rng, std::size_t n, RealType *r)
#define MCKL_ALIGNMENT
The default alignment for scalar type.
#define MCKL_DEFINE_RANDOM_DISTRIBUTION_MEMBER_0
#define MCKL_DEFINE_RANDOM_DISTRIBUTION_BATCH_1(Name, name, T, T1, p1)
#define MCKL_DEFINE_RANDOM_DISTRIBUTION_1(Name, name, T, T1, p1, v1)
#define MCKL_DEFINE_RANDOM_DISTRIBUTION_ASSERT_INT_TYPE(Name, MinBits)