Tom Lane writes:

> Oh, that's interesting.  What platform do you use?  If RAND_MAX applies
> to random() on some machines that'd probably explain why the code is
> written like it is.  But on my box (HPUX) the rand() function is old
> and crufty and considerably different from random().

rand() and RAND_MAX are defined by ANSI C, random() is a BSD-ism. I
suggest you use the former. Also, while you're at it, this is a snippet
from the C FAQ:

13.16:  How can I get random integers in a certain range?
 
A:      The obvious way,
 
                rand() % N              /* POOR */
 
        (which tries to return numbers from 0 to N-1) is poor, because
        the low-order bits of many random number generators are
        distressingly *non*-random.  (See question 13.18.)  A better
        method is something like
 
                (int)((double)rand() / ((double)RAND_MAX + 1) * N)
 
        If you're worried about using floating point, you could use
 
                rand() / (RAND_MAX / N + 1)
 
        Both methods obviously require knowing RAND_MAX (which ANSI
        #defines in <stdlib.h>), and assume that N is much less than
        RAND_MAX.
 
        (Note, by the way, that RAND_MAX is a *constant* telling you
        what the fixed range of the C library rand() function is.  You
        cannot set RAND_MAX to some other value, and there is no way of
        requesting that rand() return numbers in some other range.)
 
        If you're starting with a random number generator which returns
        floating-point values between 0 and 1, all you have to do to get
        integers from 0 to N-1 is multiply the output of that generator
        by N.
 
        References: K&R2 Sec. 7.8.7 p. 168; PCS Sec. 11 p. 172.


-- 
Peter Eisentraut                  Sernanders vï¿½g 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden


Sat, 5 Aug 2000 00:03:19 +0200 (CEST)
Peter Eisentraut <peter_e@gmx.net>
Re: Re: [GENERAL] random() function produces wrong range
Peter Eisentraut <peter_e@gmx.net> writes:
> rand() and RAND_MAX are defined by ANSI C, random() is a BSD-ism. I
> suggest you use the former.

Unfortunately, except on a few platforms like Linux, the typical
rand() implementation is vastly inferior to the typical random()
implementation.  BSD wouldn't have bothered to roll their own if
the older code hadn't been so godawful.  But unless you are using
glibc, you probably have a bug-compatible rand().

			regards, tom lane

Sat, 05 Aug 2000 22:05:21 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: Re: [GENERAL] random() function produces wrong range 