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
|
Список | 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 по дате отправления: