Andrew - Supernews wrote: > 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).
Because random returns a double, I think it is very possible that we could return 1 due to rounding, and I see no way to avoid that. I think re-running random if it returns 1 is likely to return even less random values. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 ---------------------------(end of broadcast)--------------------------- TIP 1: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly