32 [[nodiscard]] std::string
Name()
const override;
34 [[nodiscard]]
double MinValue()
const override {
return a; }
35 [[nodiscard]]
double MaxValue()
const override {
return a; }
38 [[nodiscard]]
inline double GetValue() const noexcept {
return a; }
40 [[nodiscard]]
double f(
const double &x)
const override;
41 [[nodiscard]]
double logf(
const double &x)
const override;
42 [[nodiscard]]
double F(
const double &x)
const override;
43 template <std::uniform_random_bit_generator G>
46 [[nodiscard]]
long double Mean()
const override;
47 [[nodiscard]]
long double Variance()
const override;
48 [[nodiscard]]
double Median()
const override;
49 [[nodiscard]]
double Mode()
const override;
50 [[nodiscard]]
long double Skewness()
const override;
54 double quantileImpl(
double p)
const override;
55 double quantileImpl1m(
double p)
const override;
57 std::complex<double> CFImpl(
double t)
const override;
60 [[nodiscard]]
long double Entropy()
const;
85 if (!std::isfinite(value))
86 throw std::invalid_argument(
"Degenerate distribution: value should be finite");
92 return (x == a) ? INFINITY : 0.0;
97 return (x == a) ? INFINITY : -INFINITY;
102 return (x < a) ? 0.0 : 1.0;
105template <std::uniform_random_bit_generator G>
121inline std::complex<double> DegenerateRand::CFImpl(
double t)
const
123 double re = std::cos(a * t);
124 double im = std::sin(a * t);
125 return std::complex<double>(re, im);
128inline double DegenerateRand::quantileImpl(
double)
const
133inline double DegenerateRand::quantileImpl1m(
double)
const
167 if (std::adjacent_find(
sample.begin(),
sample.end(), std::not_equal_to<>()) !=
sample.end())
The ContinuousDistribution class Abstract class for all continuous distributions.
Definition continuous.hpp:22
The DegenerateRand class Degenerate distribution.
Definition degenerate.hpp:25
double logf(const double &x) const override
Definition degenerate.hpp:95
double GetValue() const noexcept
Definition degenerate.hpp:38
long double ExcessKurtosis() const override
Definition degenerate.hpp:153
void SetValue(double value)
Definition degenerate.hpp:83
double f(const double &x) const override
Definition degenerate.hpp:90
double MinValue() const override
Definition degenerate.hpp:34
DegenerateRand(double value=0)
Definition degenerate.hpp:73
long double Skewness() const override
Definition degenerate.hpp:148
double MaxValue() const override
Definition degenerate.hpp:35
void Fit(std::span< const double > sample)
Definition degenerate.hpp:163
std::string Name() const override
Definition degenerate.hpp:78
long double Mean() const override
Definition degenerate.hpp:111
double operator()(G &g) const
Definition degenerate.hpp:106
double F(const double &x) const override
Definition degenerate.hpp:100
double Mode() const override
Mode is the value, which has the largest probability to happen, or, in the case of continuous distrib...
Definition degenerate.hpp:143
long double Entropy() const
Definition degenerate.hpp:158
double Median() const override
Definition degenerate.hpp:138
Support SupportType() const override
Definition degenerate.hpp:33
long double Variance() const override
Definition degenerate.hpp:116
virtual void sample(detail::EngineRef g, std::span< T > outputData) const
Fills the output with variate(g); distributions with a faster bulk algorithm override it.
Definition distribution.hpp:66
fit_error fitError(FitErrorCode code, const std::string &explanation) const
Definition distribution.hpp:220
The EngineRef class Non-owning, type-erased reference to any uniform random bit generator.
Definition engine/uniform.hpp:116
#define RANDLIB_DEPRECATED_FIT_MEMBER
Definition fwd.hpp:9
Definition bivariate_normal.hpp:10
@ WrongSample
the sample could not have been drawn from this distribution
@ TooFewElements
the sample is too small
Support
Shape of the support of a univariate distribution.
Definition univariate.hpp:15