Opened 16 years ago
Closed 14 years ago
#819 closed Bugs (fixed)
uniform_int<> with type's maximum availaible range error
| Reported by: | nobody | Owned by: | No-Maintainer | 
|---|---|---|---|
| Milestone: | Component: | random | |
| Version: | None | Severity: | Problem | 
| Keywords: | Cc: | 
Description (last modified by )
using boost 1_33_1, MSVC 8.0
using namespace boost;
using namespace std;
typedef int32_t IntType;// the same bug for int8_t int16_t int64_t
uniform_int<IntType> ui(numeric_limits<IntType>::min(), numeric_limits<IntType>::max());
rand48 rng;
variate_generator<rand48, uniform_int<int32_t> > gen(rng, ui);
IntType x = gen();  // infinite loop here 
If we makes range smaller or if we using unsigned types - everything is OK
So if we will look to  uniform_int.hpp we will see.....
template<class IntType = int>
class uniform_int
{
public:
....
  typedef IntType result_type;
....
  explicit uniform_int(IntType min = 0, IntType max = 9)
    : _min(min), _max(max)
  {
......
    assert(min <= max);     init();
  }.....
private:
  result_type _min, _max, _range;
  void init()
  {
    _range = _max - _min;// for SIGNED types and maximum available range we will receive..... of course -1 !!!!!!  } 
......}Also i want to draw the attention russian-speaking boost developers to the http://rsdn.ru/Forum/Message.aspx?mid=2252961&only=1
      Change History (2)
comment:1 by , 15 years ago
| Description: | modified (diff) | 
|---|---|
| Owner: | changed from to | 
| Severity: | → Problem | 
| Status: | assigned → new | 
comment:2 by , 14 years ago
| Resolution: | None → fixed | 
|---|---|
| Status: | new → closed | 
  Note:
 See   TracTickets
 for help on using tickets.
    

This was fixed in [34876]