21template <
typename RealType>
31 double lowerTail(
double x)
const;
36 [[nodiscard]] std::string
Name()
const override;
38 [[nodiscard]] RealType
MinValue()
const override {
return -R; }
39 [[nodiscard]] RealType
MaxValue()
const override {
return R; }
42 [[nodiscard]]
inline double GetRadius() const noexcept {
return R; }
44 [[nodiscard]]
double f(
const RealType &x)
const override;
45 [[nodiscard]]
double logf(
const RealType &x)
const override;
46 [[nodiscard]]
double S(
const RealType &x)
const override;
47 [[nodiscard]]
double F(
const RealType &x)
const override;
48 template <std::uniform_random_bit_generator G>
51 [[nodiscard]]
long double Mean()
const override;
52 [[nodiscard]]
long double Variance()
const override;
53 [[nodiscard]] RealType
Median()
const override;
54 [[nodiscard]] RealType
Mode()
const override;
55 [[nodiscard]]
long double Skewness()
const override;
58 [[nodiscard]]
long double Entropy()
const;
66template <
typename RealType>
72template <
typename RealType>
75 return "Wigner Semicircle(" + this->toStringWithPrecision(GetRadius()) +
")";
78template <
typename RealType>
82 throw std::invalid_argument(
"Wigner-Semicircle distribution: radius should be positive");
85 logRSq = std::log(RSq);
88template <
typename RealType>
100template <
typename RealType>
109template <
typename RealType>
114 double delta = (R + x) / R;
115 double phi = 2 * std::asin(std::sqrt(0.5 * delta));
116 double y = 2 * phi, ySq = y * y;
118 (y < 0.5) ? y * ySq / 6 * (1 - ySq / 20 * (1 - ySq / 42 * (1 - ySq / 72 * (1 - ySq / 110)))) : y - std::sin(y);
122template <
typename RealType>
129 return (x <= 0) ? lowerTail(x) : 1.0 - lowerTail(-x);
132template <
typename RealType>
139 return (x >= 0) ? lowerTail(-x) : 1.0 - lowerTail(x);
142template <
typename RealType>
143template <std::uniform_random_bit_generator G>
151template <
typename RealType>
157template <
typename RealType>
163template <
typename RealType>
169template <
typename RealType>
175template <
typename RealType>
181template <
typename RealType>
187template <
typename RealType>
The BetaRand class Beta distribution.
Definition continuous/beta.hpp:246
The ContinuousDistribution class Abstract class for all continuous distributions.
Definition continuous.hpp:22
The WignerSemicircleRand class Wigner-Semicircle distribution.
Definition wigner_semicircle.hpp:23
long double ExcessKurtosis() const override
Definition wigner_semicircle.hpp:182
WignerSemicircleRand(double radius)
Definition wigner_semicircle.hpp:67
double S(const RealType &x) const override
Definition wigner_semicircle.hpp:133
double logf(const RealType &x) const override
Definition wigner_semicircle.hpp:101
double GetRadius() const noexcept
Definition wigner_semicircle.hpp:42
RealType MaxValue() const override
Definition wigner_semicircle.hpp:39
std::string Name() const override
Definition wigner_semicircle.hpp:73
long double Mean() const override
Definition wigner_semicircle.hpp:152
RealType Mode() const override
Mode is the value, which has the largest probability to happen, or, in the case of continuous distrib...
Definition wigner_semicircle.hpp:170
long double Skewness() const override
Definition wigner_semicircle.hpp:176
double f(const RealType &x) const override
Definition wigner_semicircle.hpp:89
double F(const RealType &x) const override
Definition wigner_semicircle.hpp:123
RealType operator()(G &g) const
Definition wigner_semicircle.hpp:144
Support SupportType() const override
Definition wigner_semicircle.hpp:37
RealType MinValue() const override
Definition wigner_semicircle.hpp:38
RealType Median() const override
Definition wigner_semicircle.hpp:164
void SetRadius(double radius)
Definition wigner_semicircle.hpp:79
long double Variance() const override
Definition wigner_semicircle.hpp:158
long double Entropy() const
Definition wigner_semicircle.hpp:188
The EngineRef class Non-owning, type-erased reference to any uniform random bit generator.
Definition engine/uniform.hpp:116
constexpr long double inv_pi
Definition constants.hpp:24
constexpr long double ln2
Definition constants.hpp:18
constexpr long double pi
Definition constants.hpp:22
constexpr long double lnpi
Definition constants.hpp:21
Definition bivariate_normal.hpp:10
Support
Shape of the support of a univariate distribution.
Definition univariate.hpp:15