random() function produces wrong range

Поиск
Список
Период
Сортировка
От Tom Lane
Тема random() function produces wrong range
Дата
Msg-id 22061.965145756@sss.pgh.pa.us
обсуждение исходный текст
Ответы Re: random() function produces wrong range  (Stephan Szabo <sszabo@megazone23.bigpanda.com>)
Список pgsql-general
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:

    /* result 0.0-1.0 */
    result = ((double) random()) / RAND_MAX;

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.

regression=# select random();
      random
------------------
 35771.3981139561
(1 row)

regression=# select random();
      random
------------------
 58647.5821405683
(1 row)

This is, to say the least, a bizarre definition.

I would like to propose changing the code to

    /* result 0.0-1.0 */
    result = ((double) random()) / INT_MAX;

(and making the corresponding change in setseed()).  But I wonder if
anyone out there has applications that depend on the current behavior.

As far as I can find, random() isn't mentioned in the documentation
currently, so there probably aren't many people using it...

            regards, tom lane

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

Предыдущее
От: "Fetter, David M"
Дата:
Сообщение: RE: postgres perl DBI
Следующее
От: jeff seaman
Дата:
Сообщение: pg_dump problem