Boost logo

Boost :

From: David J. Pearce (d.pearce_at_[hidden])
Date: 2003-03-05 04:09:49


Hello,

I believe there is bug in random_number_generator when you request a
random number between 0 and 1. For example:

> random_number_generator rgen(...);
> cout << rgen(1) << endl; // causes assertion failure

I encountered this problem when using random_number_generator in
conjuction with the random_sample_n algorithm.
I have attached a simple patch which catches the case when the parameter
is 1. If anyone can tell me whether this is a reasonable fix, I would be
grateful.

Thanks,

David J. Pearce


*** random_number_generator.old 2003-02-25 16:41:26.000000000 +0000
--- random_number_generator.hpp 2003-02-25 16:42:00.000000000 +0000
***************
*** 50,56 ****
    // assignment is disallowed because there is a reference member
  
    result_type operator()(argument_type n) {
! return uniform_int<base_type>(_rng, 0, n-1)();
    }
  
  private:
--- 50,60 ----
    // assignment is disallowed because there is a reference member
  
    result_type operator()(argument_type n) {
! if(n == 1) {
! return 0;
! } else {
! return uniform_int<base_type>(_rng, 0, n-1)();
! }
    }
  
  private:


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk