17template <
typename RealType>
32 [[nodiscard]] RealType
MinValue()
const override {
return mu - s; }
33 [[nodiscard]] RealType
MaxValue()
const override {
return mu + s; }
40 [[nodiscard]]
inline double GetLocation() const noexcept {
return mu; }
41 [[nodiscard]]
inline double GetScale() const noexcept {
return s; }
43 [[nodiscard]]
double f(
const RealType &x)
const override;
44 [[nodiscard]]
double logf(
const RealType &x)
const override;
45 [[nodiscard]]
double F(
const RealType &x)
const override;
46 [[nodiscard]]
double S(
const RealType &x)
const override;
48 template <std::uniform_random_bit_generator G>
50 template <std::uniform_random_bit_generator G>
53 [[nodiscard]]
long double Mean()
const override;
54 [[nodiscard]]
long double Variance()
const override;
55 [[nodiscard]] RealType
Median()
const override;
56 [[nodiscard]] RealType
Mode()
const override;
57 [[nodiscard]]
long double Skewness()
const override;
61 std::complex<double> CFImpl(
double t)
const override;
68template <
typename RealType>
76 [[nodiscard]] std::string
Name()
const override;
91template <
typename RealType>
96 [[nodiscard]] std::string
Name()
const override;
106template <
typename RealType>
109 SetLocation(location);
113template <
typename RealType>
116 if (!std::isfinite(location))
117 throw std::invalid_argument(
"Raised cosine distribution: location should be finite");
121template <
typename RealType>
125 throw std::invalid_argument(
"Raised-Cosine distribution: scale should be positive");
128 log2S = std::log(2 * s);
131template <
typename RealType>
134 double xAdj = (x - mu) / s_pi;
137 double y = std::cos(xAdj) + 1.0;
141template <
typename RealType>
144 double xAdj = (x - mu) / s_pi;
147 double y = std::cos(xAdj);
152template <
typename RealType>
155 double xAdj = (x - mu) / s;
166template <
typename RealType>
169 double xAdj = (x - mu) / s;
177 return 0.5 - 0.5 * y;
180template <
typename RealType>
181template <std::uniform_random_bit_generator G>
186 RealType XSq = X * X;
189 RealType W = 0.0, V = 1.0;
208 throw std::runtime_error(
"Raised-Cosine distribution: sampling failed");
211template <
typename RealType>
212template <std::uniform_random_bit_generator G>
215 return mu + s_pi * StandardVariate(g);
218template <
typename RealType>
224template <
typename RealType>
231template <
typename RealType>
237 double sinc = (u == 0.0) ? 1.0 : std::sin(u) / u;
239 return y * std::exp(std::complex<double>(0.0, mu * t));
242template <
typename RealType>
248template <
typename RealType>
254template <
typename RealType>
260template <
typename RealType>
265 static constexpr long double y = numerator / (denominator * denominator);
268template <
typename RealType>
271 return "Raised cosine(" + this->toStringWithPrecision(this->GetLocation()) +
", " +
272 this->toStringWithPrecision(this->GetScale()) +
")";
274template <
typename RealType>
The ContinuousDistribution class Abstract class for all continuous distributions.
Definition continuous.hpp:22
The ProbabilityDistribution class Abstract class for all probability distributions.
Definition distribution.hpp:28
The RaabGreenRand class Raab-Green distribution.
Definition raised_cosine.hpp:93
std::string Name() const override
Definition raised_cosine.hpp:275
RaabGreenRand()
Definition raised_cosine.hpp:95
The RaisedCosineDistribution class Abstract class for Raised-cosine distribution.
Definition raised_cosine.hpp:19
RaisedCosineDistribution(double location, double scale)
Definition raised_cosine.hpp:107
double F(const RealType &x) const override
Definition raised_cosine.hpp:153
double S(const RealType &x) const override
Definition raised_cosine.hpp:167
double logf(const RealType &x) const override
Definition raised_cosine.hpp:142
long double Skewness() const override
Definition raised_cosine.hpp:255
double GetLocation() const noexcept
Definition raised_cosine.hpp:40
RealType MinValue() const override
Definition raised_cosine.hpp:32
RealType Mode() const override
Mode is the value, which has the largest probability to happen, or, in the case of continuous distrib...
Definition raised_cosine.hpp:249
long double Mean() const override
Definition raised_cosine.hpp:219
static RealType StandardVariate(G &g)
Definition raised_cosine.hpp:182
void SetLocation(double location)
Definition raised_cosine.hpp:114
RealType MaxValue() const override
Definition raised_cosine.hpp:33
RealType Median() const override
Definition raised_cosine.hpp:243
void SetScale(double scale)
Definition raised_cosine.hpp:122
Support SupportType() const override
Definition raised_cosine.hpp:31
double f(const RealType &x) const override
Definition raised_cosine.hpp:132
double GetScale() const noexcept
Definition raised_cosine.hpp:41
RealType operator()(G &g) const
Definition raised_cosine.hpp:213
long double Variance() const override
Definition raised_cosine.hpp:225
long double ExcessKurtosis() const override
Definition raised_cosine.hpp:261
The RaisedCosineRand class Raised-cosine distribution.
Definition raised_cosine.hpp:70
std::string Name() const override
Definition raised_cosine.hpp:269
RaisedCosineRand(double location=0, double scale=randlib::consts::pi)
Definition raised_cosine.hpp:72
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 half_pi
Definition constants.hpp:23
constexpr long double pi
Definition constants.hpp:22
constexpr long double pi_sq
Definition constants.hpp:39
constexpr long double lnpi
Definition constants.hpp:21
Real standardNormal(G &g)
Ziggurat algorithm of Marsaglia and Tsang with 256 layers and an explicit sign bit.
Definition variates.hpp:45
Definition bivariate_normal.hpp:10
Support
Shape of the support of a univariate distribution.
Definition univariate.hpp:15