mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 03:46:53 -05:00
[multiple changes]
2007-10-20 Paolo Carlini <pcarlini@suse.de> * include/tr1/random (uniform_int<>::_M_call(_UniformRandomNumberGenerator&, result_type, result_type, true_type)): Fix small thinko. 2007-10-19 Paolo Carlini <pcarlini@suse.de> PR libstdc++/33815 * include/tr1/random (uniform_int<>::_M_call(_UniformRandomNumberGenerator&, result_type, result_type, true_type)): Avoid the modulo (which uses the low-order bits). From-SVN: r129507
This commit is contained in:
@@ -1618,10 +1618,15 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
|
||||
result_type
|
||||
_M_call(_UniformRandomNumberGenerator& __urng,
|
||||
result_type __min, result_type __max, true_type)
|
||||
{
|
||||
{
|
||||
// XXX Must be fixed to also work when __urng.max() - __urng.min()
|
||||
// is smaller than __max - __min.
|
||||
typedef typename __gnu_cxx::__add_unsigned<typename
|
||||
_UniformRandomNumberGenerator::result_type>::__type __utype;
|
||||
return result_type(__utype(__urng()) % (__max - __min + 1)) + __min;
|
||||
return result_type((__max - __min + 1.0L)
|
||||
* (__utype(__urng()) - __utype(__urng.min()))
|
||||
/ (__utype(__urng.max())
|
||||
- __utype(__urng.min()) + 1.0L)) + __min;
|
||||
}
|
||||
|
||||
template<typename _UniformRandomNumberGenerator>
|
||||
|
||||
Reference in New Issue
Block a user