Re: random() function produces wrong range

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: random() function produces wrong range
Дата
Msg-id 1254.965248580@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: random() function produces wrong range  (Malcolm Beattie <mbeattie@sable.ox.ac.uk>)
Ответы Re: random() function produces wrong range  (Thomas Swan <tswan@olemiss.edu>)
Список pgsql-hackers
Malcolm Beattie <mbeattie@sable.ox.ac.uk> writes:
> Tom Lane writes:
>> Thomas Lockhart <lockhart@alumni.caltech.edu> writes:
>>>> The Linux man pages indicate that the behavior and underlying
>>>> implementation of random() and rand() are the same (so I just picked
>>>> one).
>>
>> Ah, well, there's your problem.  Whoever did this part of the library
>> on Linux took shortcuts.

> Why? Linux is compliant with the Single Unix Standard v2 from my brief
> reading of it.

Sorry, bad choice of words on my part.  Linux is within its rights to
use the same underlying implementation for rand() and random(), but it
is a poor guide to the behavior of other systems, which are equally
within their rights not to.

>> none of the man pages I've looked at so far mention it).  But all the
>> machines say that the output of random() is 31 bits, so INT_MAX should
>> work.

> SuSv2 says explicitly 2^31-1 so you should use that, otherwise you'll
> be non-portable to platforms with 64-bit ints, for example.

Maybe.  You don't think that a 64-bit-int platform would choose to
supply a random() function with a range of 2^63-1?  The HPUX and SunOS
man pages clearly specify that random()'s result is "long", so I think
a case could also be made for LONG_MAX.

I suspect we have a good chance at getting burned no matter what we use
:-(.  But RAND_MAX is definitely the wrong thing.

            regards, tom lane

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

Предыдущее
От: "David Lloyd-Jones"
Дата:
Сообщение: Is There Anybody in Toronto Running Postgresql with AOLserver?
Следующее
От: Tatsuo Ishii
Дата:
Сообщение: comparing rows