[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:
Paolo Carlini
2007-10-20 10:02:34 +00:00
parent e8103d8262
commit f3be87cd22

View File

@@ -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>