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