Commit ff2e697a by Paolo Carlini Committed by Paolo Carlini

random.h (negative_binomial_distribution<>::…

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
parent ec6165f8
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<>::
......
......@@ -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())
{ }
/**
......
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment