Boost logo

Boost :

From: Douglas Gregor (gregod_at_[hidden])
Date: 2002-03-07 16:51:24

This code in uniform_int:
 120 if(_brange / _range > 4 /* quantization_cutoff */ ) {
 121 // the new range is vastly smaller than the source range,
 122 // so quantization effects are not relevant
 123 return uniform_smallint<base_type,result_type>(_rng, _min, _max)();
 124 } else {

will make uniform_smallint do very bad things when _max-_min+1 is large
enough to make 32*_range*_range (where _range = _max-_min+1 at line 95 of
uniform_smallint.hpp) overflow and become negative. Then we get stuck in the
following loop forever (uniform_smallint.hpp):

  95 const base_result r = 32*_range*_range;
  96 for(; r_base >= r; _factor *= 2)
  97 r_base /= 2;

I don't know enough about this to know if uniform_int should take care of
this (and not deflect to uniform_smallint if it would overflow), or if
uniform_smallint should deal with this overflow itself.


Boost list run by bdawes at, gregod at, cpdaniel at, john at