4#ifndef TETL_RANDOM_BERNOULLI_DISTRIBUTION_HPP
5#define TETL_RANDOM_BERNOULLI_DISTRIBUTION_HPP
7#include <etl/_limits/numeric_limits.hpp>
8#include <etl/_random/generate_canonical.hpp>
9#include <etl/_tuple/tuple.hpp>
15 using result_type =
bool;
30 [[
nodiscard]]
constexpr auto p()
const noexcept ->
double
58 [[
nodiscard]]
constexpr auto p()
const noexcept ->
double
85 constexpr auto reset()
noexcept ->
void
90 template <
typename URBG>
91 [[nodiscard]]
constexpr auto operator()(URBG& g)
noexcept(
noexcept(
g())) -> result_type
93 return (*
this)(g, _param);
96 template <
typename URBG>
97 [[nodiscard]]
constexpr auto operator()(URBG& g,
param_type const& parm)
noexcept(
noexcept(
g())) -> result_type
100 constexpr auto bits = ~size_t{0};
101 constexpr auto minBits = digits < bits ? digits : bits;
102 static_assert(minBits <= 64);
104 return generate_canonical<
double, minBits>(g) < parm
.p();
Definition adjacent_find.hpp:9
Definition bernoulli_distribution.hpp:17
constexpr param_type() noexcept
Definition bernoulli_distribution.hpp:20
double probability
Definition bernoulli_distribution.hpp:40
constexpr auto p() const noexcept -> double
Definition bernoulli_distribution.hpp:30
constexpr param_type(double p) noexcept
Definition bernoulli_distribution.hpp:25
friend constexpr auto operator==(param_type const &lhs, param_type const &rhs) noexcept -> bool
Definition bernoulli_distribution.hpp:35
Definition bernoulli_distribution.hpp:14
constexpr bernoulli_distribution(param_type const &parm) noexcept
Definition bernoulli_distribution.hpp:53
constexpr auto operator()(URBG &g) noexcept(noexcept(g())) -> result_type
Definition bernoulli_distribution.hpp:91
friend constexpr auto operator==(bernoulli_distribution const &x, bernoulli_distribution const &y) noexcept -> bool
Definition bernoulli_distribution.hpp:108
constexpr auto param(param_type const &parm) noexcept -> void
Definition bernoulli_distribution.hpp:63
constexpr auto reset() noexcept -> void
Definition bernoulli_distribution.hpp:85
constexpr auto p() const noexcept -> double
Definition bernoulli_distribution.hpp:58
constexpr auto param() const noexcept -> param_type
Definition bernoulli_distribution.hpp:68
constexpr bernoulli_distribution(double p) noexcept
Definition bernoulli_distribution.hpp:48
constexpr auto max() const noexcept -> result_type
Definition bernoulli_distribution.hpp:79
constexpr auto min() const noexcept -> result_type
Definition bernoulli_distribution.hpp:73
constexpr auto operator()(URBG &g, param_type const &parm) noexcept(noexcept(g())) -> result_type
Definition bernoulli_distribution.hpp:97
constexpr bernoulli_distribution() noexcept
Definition bernoulli_distribution.hpp:43
static constexpr int digits
Definition numeric_limits.hpp:1111
Definition numeric_limits.hpp:18