Bug: random() can return 1.0 - Mailing list pgsql-hackers

From Andrew - Supernews
Subject Bug: random() can return 1.0
Date
Msg-id slrndt05b9.1rvr.andrew+nonews@atlantis.supernews.net
Whole thread Raw
Responses Re: Bug: random() can return 1.0  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-hackers
src/backend/utils/adt/float.c:

/**        drandom        - returns a random number*/
Datum
drandom(PG_FUNCTION_ARGS)
{float8        result;
/* result 0.0-1.0 */result = ((double) random()) / ((double) MAX_RANDOM_VALUE);
PG_RETURN_FLOAT8(result);
}

Whoever wrote this obviously did intend it to return values in [0.0,1.0]
but this makes it totally useless for generating uniform random ranges
in the usual way, since random() * N will return N with probability 2^-31.
The documentation is sufficiently imprecise about this to cause confusion
(seen in questions asked on the IRC channel), and the problem can't be
worked around at the application level without knowing the value of
MAX_RANDOM_VALUE in order to correct the range to [0.0,1.0).

-- 
Andrew, Supernews
http://www.supernews.com - individual and corporate NNTP services


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: un-vacuum?
Next
From: Simon Riggs
Date:
Subject: Re: No heap lookups on index