23template <
typename RealType>
34 [[nodiscard]] std::string
Name()
const override;
36 [[nodiscard]] RealType
MinValue()
const override {
return 0; }
37 [[nodiscard]] RealType
MaxValue()
const override {
return n; }
40 [[nodiscard]]
inline int GetNumber() const noexcept {
return n; }
42 [[nodiscard]]
double f(
const RealType &x)
const override;
43 [[nodiscard]]
double logf(
const RealType &x)
const override;
44 [[nodiscard]]
double F(
const RealType &x)
const override;
45 [[nodiscard]]
double S(
const RealType &x)
const override;
46 template <std::uniform_random_bit_generator G>
49 [[nodiscard]]
long double Mean()
const override;
50 [[nodiscard]]
long double Variance()
const override;
51 [[nodiscard]] RealType
Median()
const override;
52 [[nodiscard]] RealType
Mode()
const override;
53 [[nodiscard]]
long double Skewness()
const override;
58 double lowerHalfSum(
double x,
int power)
const;
59 std::complex<double> CFImpl(
double t)
const override;
67template <
typename RealType>
73template <
typename RealType>
76 return "Irwin-Hall(" + this->toStringWithPrecision(GetNumber()) +
")";
79template <
typename RealType>
83 throw std::invalid_argument(
"Irwin-Hall distribution: number should be positive");
87template <
typename RealType>
91 int last = std::floor(x);
92 for (
int i = 0; i <= last; ++i) {
93 double add = power * std::log(x - i);
97 sum += (i % 2) ? -add : add;
102template <
typename RealType>
112 return (x <= 1.0) ? x : 2.0 - x;
114 return n * lowerHalfSum(std::min<double>(x, n - x), n - 1);
117template <
typename RealType>
120 return std::log(f(x));
123template <
typename RealType>
137 double temp = 2.0 - x;
138 return 1.0 - 0.5 * temp * temp;
141 return (2 * x <= n) ? lowerHalfSum(x, n) : 1.0 - lowerHalfSum(n - x, n);
144template <
typename RealType>
153 return (2 * x >= n) ? lowerHalfSum(n - x, n) : 1.0 - lowerHalfSum(x, n);
156template <
typename RealType>
157template <std::uniform_random_bit_generator G>
161 for (
int i = 0; i != n; ++i)
166template <
typename RealType>
172template <
typename RealType>
178template <
typename RealType>
181 return std::pow(U.CF(t), n);
184template <
typename RealType>
190template <
typename RealType>
196template <
typename RealType>
202template <
typename RealType>
The ContinuousDistribution class Abstract class for all continuous distributions.
Definition continuous.hpp:22
The IrwinHallRand class Irwin-Hall distribution.
Definition irwin_hall.hpp:25
double S(const RealType &x) const override
Definition irwin_hall.hpp:145
RealType operator()(G &g) const
Definition irwin_hall.hpp:158
long double ExcessKurtosis() const override
Definition irwin_hall.hpp:203
int GetNumber() const noexcept
Definition irwin_hall.hpp:40
double F(const RealType &x) const override
Definition irwin_hall.hpp:124
void SetNumber(int number)
Definition irwin_hall.hpp:80
std::string Name() const override
Definition irwin_hall.hpp:74
RealType MaxValue() const override
Definition irwin_hall.hpp:37
RealType Median() const override
Definition irwin_hall.hpp:185
RealType MinValue() const override
Definition irwin_hall.hpp:36
Support SupportType() const override
Definition irwin_hall.hpp:35
double f(const RealType &x) const override
Definition irwin_hall.hpp:103
IrwinHallRand(size_t number)
Definition irwin_hall.hpp:68
double logf(const RealType &x) const override
Definition irwin_hall.hpp:118
long double Mean() const override
Definition irwin_hall.hpp:167
long double Variance() const override
Definition irwin_hall.hpp:173
RealType Mode() const override
Mode is the value, which has the largest probability to happen, or, in the case of continuous distrib...
Definition irwin_hall.hpp:191
long double Skewness() const override
Definition irwin_hall.hpp:197
The EngineRef class Non-owning, type-erased reference to any uniform random bit generator.
Definition engine/uniform.hpp:116
Real lfact(size_t n)
Calculate log(n!) using table values for small n <= 255 and built-in lgamma function for large n > 25...
Definition math/gamma.hpp:591
Definition bivariate_normal.hpp:10
Support
Shape of the support of a univariate distribution.
Definition univariate.hpp:15