diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-03-25 10:06:33 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-03-25 10:06:33 +0000 |
commit | ff2e697a03ccf7afba8e863f789c76715e005e4c (patch) | |
tree | c2c00d3744d6db99bffcbbfba5d53c4e3559288b | |
parent | ec6165f8528e46fe0dc3fcd9c6539171e8b2f315 (diff) | |
download | gcc-ff2e697a03ccf7afba8e863f789c76715e005e4c.zip gcc-ff2e697a03ccf7afba8e863f789c76715e005e4c.tar.gz gcc-ff2e697a03ccf7afba8e863f789c76715e005e4c.tar.bz2 |
random.h (negative_binomial_distribution<>:: negative_binomial_distribution(_IntType, double), [...]): Tweak construction of _M_gd.
2011-03-25 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/random.h (negative_binomial_distribution<>::
negative_binomial_distribution(_IntType, double),
negative_binomial_distribution<>::
negative_binomial_distribution(const param_type&)): Tweak
construction of _M_gd.
* include/bits/random.tcc (negative_binomial_distribution<>::
operator()): Adjust.
From-SVN: r171443
-rw-r--r-- | libstdc++-v3/ChangeLog | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/random.h | 4 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/random.tcc | 11 |
3 files changed, 17 insertions, 8 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 9182dc0..2facd17 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,13 @@ +2011-03-25 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/random.h (negative_binomial_distribution<>:: + negative_binomial_distribution(_IntType, double), + negative_binomial_distribution<>:: + negative_binomial_distribution(const param_type&)): Tweak + construction of _M_gd. + * include/bits/random.tcc (negative_binomial_distribution<>:: + operator()): Adjust. + 2011-03-24 Paolo Carlini <paolo.carlini@oracle.com> * include/bits/random.h (negative_binomial_distribution<>:: diff --git a/libstdc++-v3/include/bits/random.h b/libstdc++-v3/include/bits/random.h index 8b09a98..7b7f596 100644 --- a/libstdc++-v3/include/bits/random.h +++ b/libstdc++-v3/include/bits/random.h @@ -3804,12 +3804,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION explicit negative_binomial_distribution(_IntType __k = 1, double __p = 0.5) - : _M_param(__k, __p), _M_gd(__k, 1.0) + : _M_param(__k, __p), _M_gd(__k, (1.0 - __p) / __p) { } explicit negative_binomial_distribution(const param_type& __p) - : _M_param(__p), _M_gd(__p.k(), 1.0) + : _M_param(__p), _M_gd(__p.k(), (1.0 - __p.p()) / __p.p()) { } /** diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc index 0bbc9fd..01ee582 100644 --- a/libstdc++-v3/include/bits/random.tcc +++ b/libstdc++-v3/include/bits/random.tcc @@ -1075,7 +1075,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __is; } - // This is Leger's algorithm. + // This is Leger's algorithm, also in Devroye, Ch. X, Example 1.5. template<typename _IntType> template<typename _UniformRandomNumberGenerator> typename negative_binomial_distribution<_IntType>::result_type @@ -1085,8 +1085,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const double __y = _M_gd(__urng); // XXX Is the constructor too slow? - std::poisson_distribution<result_type> __poisson(__y * (1.0 - p()) - / p()); + std::poisson_distribution<result_type> __poisson(__y); return __poisson(__urng); } @@ -1100,10 +1099,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef typename std::gamma_distribution<result_type>::param_type param_type; - const double __y = _M_gd(__urng, param_type(__p.k(), 1.0)); + const double __y = + _M_gd(__urng, param_type(__p.k(), (1.0 - __p.p()) / __p.p())); - std::poisson_distribution<result_type> __poisson(__y * (1.0 - __p.p()) - / __p.p() ); + std::poisson_distribution<result_type> __poisson(__y); return __poisson(__urng); } |