Go to the documentation of this file.
15 #ifndef ABSL_RANDOM_BETA_DISTRIBUTION_H_
16 #define ABSL_RANDOM_BETA_DISTRIBUTION_H_
23 #include <type_traits>
25 #include "absl/meta/type_traits.h"
26 #include "absl/random/internal/fast_uniform_bits.h"
27 #include "absl/random/internal/fastmath.h"
28 #include "absl/random/internal/generate_real.h"
29 #include "absl/random/internal/iostream_state_saver.h"
48 template <
typename RealType =
double>
116 y_ = std::sqrt((1 +
r) / (
b_ *
r * 2 -
r + 1));
124 return a.alpha_ ==
b.alpha_ &&
a.beta_ ==
b.beta_;
137 #define ABSL_RANDOM_INTERNAL_LOG_EXP_CONSTEXPR
139 #define ABSL_RANDOM_INTERNAL_LOG_EXP_CONSTEXPR constexpr
159 #undef ABSL_RANDOM_INTERNAL_LOG_EXP_CONSTEXPR
198 "Class-template absl::beta_distribution<> must be "
199 "parameterized using a floating-point type.");
212 template <
typename URBG>
217 template <
typename URBG>
219 const param_type&
p);
232 return a.param_ ==
b.param_;
236 return a.param_ !=
b.param_;
240 template <
typename URBG>
242 const param_type&
p);
244 template <
typename URBG>
246 const param_type&
p);
248 template <
typename URBG>
264 #if defined(__powerpc64__) || defined(__PPC64__) || defined(__powerpc__) || \
265 defined(__ppc__) || defined(__PPC__)
268 constexpr
long double
274 template <
typename RealType>
275 template <
typename URBG>
291 u = GenerateRealFromBits<real_type, GeneratePositiveTag, false>(
293 v = GenerateRealFromBits<real_type, GeneratePositiveTag, false>(
299 x = std::pow(
u,
p.a_);
300 y = std::pow(
v,
p.b_);
328 return std::exp(
x -
z);
332 template <
typename RealType>
333 template <
typename URBG>
347 result_type(1.3862943611198906188344642429163531361);
354 u1 = GenerateRealFromBits<real_type, GeneratePositiveTag, false>(
356 u2 = GenerateRealFromBits<real_type, GeneratePositiveTag, false>(
359 w =
p.a_ * std::exp(
v);
361 r =
p.gamma_ *
v - kLogFour;
364 if (!use_algorithm_ba &&
s + kS >= 5 *
z) {
368 if (!use_algorithm_ba &&
s >= t) {
376 return p.inverted_ ? (1 - w * bw_inv) : w * bw_inv;
379 template <
typename RealType>
380 template <
typename URBG>
396 template <
typename CharT,
typename Traits,
typename RealType>
398 std::basic_ostream<CharT, Traits>& os,
402 os <<
x.alpha() << os.fill() <<
x.beta();
406 template <
typename CharT,
typename Traits,
typename RealType>
408 std::basic_istream<CharT, Traits>& is,
415 alpha = random_internal::read_floating_point<result_type>(is);
416 if (is.fail())
return is;
417 beta = random_internal::read_floating_point<result_type>(is);
427 #endif // ABSL_RANDOM_BETA_DISTRIBUTION_H_
istream_state_saver< std::basic_istream< CharT, Traits > > make_istream_state_saver(std::basic_istream< CharT, Traits > &is, std::ios_base::fmtflags flags=std::ios_base::dec|std::ios_base::scientific|std::ios_base::skipws)
ABSL_NAMESPACE_BEGIN std::ostream & operator<<(std::ostream &os, absl::LogSeverity s)
FieldDescriptor::Type real_type(FieldType type)
typename std::conditional< B, T, F >::type conditional_t
static ABSL_RANDOM_INTERNAL_LOG_EXP_CONSTEXPR result_type ThresholdForSmallA()
OPENSSL_EXPORT pem_password_cb void * u
friend bool operator==(const param_type &a, const param_type &b)
#define ABSL_NAMESPACE_END
result_type alpha() const
result_type() max() const
RealType GenerateRealFromBits(uint64_t bits, int exp_bias=0)
result_type AlgorithmCheng(URBG &g, const param_type &p)
#define ABSL_NAMESPACE_BEGIN
result_type operator()(URBG &g)
param_type(result_type alpha, result_type beta)
result_type AlgorithmJoehnk(URBG &g, const param_type &p)
#define ABSL_RANDOM_INTERNAL_LOG_EXP_CONSTEXPR
result_type DegenerateCase(URBG &g, const param_type &p)
beta_distribution(result_type alpha, result_type beta=1)
friend bool operator!=(const param_type &a, const param_type &b)
random_internal::FastUniformBits< uint64_t > fast_u64_
constexpr uint128 operator>>(uint128 lhs, int amount)
beta_distribution(const param_type &p)
result_type alpha() const
static ABSL_RANDOM_INTERNAL_LOG_EXP_CONSTEXPR result_type ThresholdForLargeA()
result_type() min() const
void param(const param_type &p)
friend bool operator!=(const beta_distribution &a, const beta_distribution &b)
friend class beta_distribution
ostream_state_saver< std::basic_ostream< CharT, Traits > > make_ostream_state_saver(std::basic_ostream< CharT, Traits > &os, std::ios_base::fmtflags flags=std::ios_base::dec|std::ios_base::left|std::ios_base::scientific)
#define ABSL_FALLTHROUGH_INTENDED
friend bool operator==(const beta_distribution &a, const beta_distribution &b)
static constexpr result_type ThresholdPadding()
grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:46