Re: random() function produces wrong range

Поиск
Список
Период
Сортировка
От Thomas Lockhart
Тема Re: random() function produces wrong range
Дата
Msg-id 3987BB5A.AE063C9C@alumni.caltech.edu
обсуждение исходный текст
Ответ на random() function produces wrong range  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: random() function produces wrong range  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
> The comment in the random() function indicates that its author thought
> it'd produce output in the range 0..1, which seems like a pretty
> reasonable definition:
> Unfortunately, at least on my box, it produces no such thing.  random()
> actually yields values in the range 0..2^31-1 --- while RAND_MAX is
> only 32767, because it applies to the rand() function not random().
> So what I actually get is floating-point output in the range 0..65535.
> This is, to say the least, a bizarre definition.

Or, a bizarre machine. Linux (where I did the testing) produces the
expected result.

> I would like to propose changing the code to
>         /* result 0.0-1.0 */
>         result = ((double) random()) / INT_MAX;

Erk...

Actually, I depend on the behavior being as advertised, which is what
you would have expected. This is true on Linux boxes from RedHat-5.2 to
Mandrake-7.1. Not sure why your machine is different, but if there is a
more portable way to define this let's find it. Otherwise, get used to
#ifdef HPUX ;)

The Linux man pages indicate that the behavior and underlying
implementation of random() and rand() are the same (so I just picked
one). Would it be better to try using rand() instead?

                     - Thomas

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Alex Pilosov
Дата:
Сообщение: Re: mac.c
Следующее
От: Guo Bin
Дата:
Сообщение: Re: random() function produces wrong range