diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:12:59 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:12:59 +0900 |
commit | b8cf34c691623e4ec329053cbbf68522a855882d (patch) | |
tree | 34da08632a99677f6b79ecb65e5b655a5b69a67f /boost/random/poisson_distribution.hpp | |
parent | 3fdc3e5ee96dca5b11d1694975a65200787eab86 (diff) | |
download | boost-b8cf34c691623e4ec329053cbbf68522a855882d.tar.gz boost-b8cf34c691623e4ec329053cbbf68522a855882d.tar.bz2 boost-b8cf34c691623e4ec329053cbbf68522a855882d.zip |
Imported Upstream version 1.67.0upstream/1.67.0
Diffstat (limited to 'boost/random/poisson_distribution.hpp')
-rw-r--r-- | boost/random/poisson_distribution.hpp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/boost/random/poisson_distribution.hpp b/boost/random/poisson_distribution.hpp index 759f206e42..1281a7d859 100644 --- a/boost/random/poisson_distribution.hpp +++ b/boost/random/poisson_distribution.hpp @@ -255,13 +255,13 @@ private: using std::exp; if(use_inversion()) { - _exp_mean = exp(-_mean); + _u._exp_mean = exp(-_mean); } else { - _ptrd.smu = sqrt(_mean); - _ptrd.b = 0.931 + 2.53 * _ptrd.smu; - _ptrd.a = -0.059 + 0.02483 * _ptrd.b; - _ptrd.inv_alpha = 1.1239 + 1.1328 / (_ptrd.b - 3.4); - _ptrd.v_r = 0.9277 - 3.6224 / (_ptrd.b - 2); + _u._ptrd.smu = sqrt(_mean); + _u._ptrd.b = 0.931 + 2.53 * _u._ptrd.smu; + _u._ptrd.a = -0.059 + 0.02483 * _u._ptrd.b; + _u._ptrd.inv_alpha = 1.1239 + 1.1328 / (_u._ptrd.b - 3.4); + _u._ptrd.v_r = 0.9277 - 3.6224 / (_u._ptrd.b - 2); } } @@ -275,18 +275,18 @@ private: while(true) { RealType u; RealType v = uniform_01<RealType>()(urng); - if(v <= 0.86 * _ptrd.v_r) { - u = v / _ptrd.v_r - 0.43; + if(v <= 0.86 * _u._ptrd.v_r) { + u = v / _u._ptrd.v_r - 0.43; return static_cast<IntType>(floor( - (2*_ptrd.a/(0.5-abs(u)) + _ptrd.b)*u + _mean + 0.445)); + (2*_u._ptrd.a/(0.5-abs(u)) + _u._ptrd.b)*u + _mean + 0.445)); } - if(v >= _ptrd.v_r) { + if(v >= _u._ptrd.v_r) { u = uniform_01<RealType>()(urng) - 0.5; } else { - u = v/_ptrd.v_r - 0.93; + u = v/_u._ptrd.v_r - 0.93; u = ((u < 0)? -0.5 : 0.5) - u; - v = uniform_01<RealType>()(urng) * _ptrd.v_r; + v = uniform_01<RealType>()(urng) * _u._ptrd.v_r; } RealType us = 0.5 - abs(u); @@ -294,13 +294,13 @@ private: continue; } - RealType k = floor((2*_ptrd.a/us + _ptrd.b)*u+_mean+0.445); - v = v*_ptrd.inv_alpha/(_ptrd.a/(us*us) + _ptrd.b); + RealType k = floor((2*_u._ptrd.a/us + _u._ptrd.b)*u+_mean+0.445); + v = v*_u._ptrd.inv_alpha/(_u._ptrd.a/(us*us) + _u._ptrd.b); RealType log_sqrt_2pi = 0.91893853320467267; if(k >= 10) { - if(log(v*_ptrd.smu) <= (k + 0.5)*log(_mean/k) + if(log(v*_u._ptrd.smu) <= (k + 0.5)*log(_mean/k) - _mean - log_sqrt_2pi + k @@ -320,7 +320,7 @@ private: template<class URNG> IntType invert(URNG& urng) const { - RealType p = _exp_mean; + RealType p = _u._exp_mean; IntType x = 0; RealType u = uniform_01<RealType>()(urng); while(u > p) { @@ -344,7 +344,7 @@ private: } _ptrd; // for inversion RealType _exp_mean; - }; + } _u; /// @endcond }; |