Boost logo

Boost :

From: Tarjei Knapstad (tarjeik_at_[hidden])
Date: 2003-03-05 07:38:37


On Wed, 2003-03-05 at 10:09, David J. Pearce wrote:
> Hello,
>
> I believe there is bug in random_number_generator when you request a
> random number between 0 and 1. For example:
>
As far as I can understand you are asking for a ranomized integer value
in the range [0,n) (i.e. n exclusive). If randomizing bits is what you
want, then the correct call is rgen(2), not rgen(1) (which basically
mean asking for an integer between 0 and 0 which doesn't exist so the
failure is expected). This may look counterintuitive to you, but you can
easily implement your own version which does not subtract 1 from n if
wanted.

> > 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.
>
The patch fixes a case which is wrong in the first place, so my answer
would be no :)

<snip>

> result_type operator()(argument_type n) {
> ! if(n == 1) {
> ! return 0;
> ! } else {
> ! return uniform_int<base_type>(_rng, 0, n-1)();
> ! }
> }
>
Not that it matters, but the 'else' here is useless. Try avoiding
unnecessary else clauses.

Regards,

--
Tarjei

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