Re: [HACKERS] random() function produces wrong range - Mailing list pgsql-general

From Tom Lane
Subject Re: [HACKERS] random() function produces wrong range
Date
Msg-id 7985.965314590@sss.pgh.pa.us
Whole thread Raw
In response to Re: [HACKERS] random() function produces wrong range  (Thomas Swan <tswan@olemiss.edu>)
List pgsql-general
Thomas Swan <tswan@olemiss.edu> writes:
>> I suspect we have a good chance at getting burned no matter what we use
>> :-(.  But RAND_MAX is definitely the wrong thing.

> Is it possible to test (during configure phase) and then go from there...
> or does it need to be the same for all platforms?

I thought about that last night.  We could do a configure test.  Since
it'd be probing random() results there'd be a small probability of
failure, but if we wire in an assumption that the max value must be
2^(15 + n*16)-1 for some n, ten or so probes would give us a failure
probability on the order of 2^-160, which ought to satisfy anyone.

However, in the absence of any hard evidence that there are platforms
where the value is different from 2^31-1, it's probably just a waste of
configuration cycles at the moment.

I suggest we add a config.h constant like

/* The local random() function yields values 0 .. MAX_RANDOM_VALUE */
#define MAX_RANDOM_VALUE  <2^31-1>

and use that in the code.  Then, if we ever find a platform where
random() does actually produce 64-bit results, it'll be time enough
to crank up a real configure test to set the value.

Comments?

            regards, tom lane

pgsql-general by date:

Previous
From: Guillaume Perréal
Date:
Subject: Re: Can't copy from file into table
Next
From: Tom Lane
Date:
Subject: Re: Functional indices with const params.