Re: Re: [GENERAL] random() function produces wrong range
От | Dave Smith |
---|---|
Тема | Re: Re: [GENERAL] random() function produces wrong range |
Дата | |
Msg-id | 398735C1.3537CD7A@candata.com обсуждение исходный текст |
Ответ на | Re: [GENERAL] random() function produces wrong range (Stephan Szabo <sszabo@megazone23.bigpanda.com>) |
Список | pgsql-hackers |
Stephan Szabo wrote: > > On Tue, 1 Aug 2000, Tom Lane wrote: > > > Stephan Szabo <sszabo@megazone23.bigpanda.com> writes: > > > Actually, on my machines, both man pages for rand() and random() say > > > they return values between 0 and RAND_MAX (whether that's true or not > > > is another matter). In my case RAND_MAX==INT_MAX so the change wouldn't > > > be a problem, but it might be problematic on some of the 64 bit machines. > > > > Oh, that's interesting. What platform do you use? If RAND_MAX applies > > to random() on some machines that'd probably explain why the code is > > written like it is. But on my box (HPUX) the rand() function is old > > and crufty and considerably different from random(). > > That's from a pair of linux boxes, although checking on a FreeBSD box a > friend has, his boxes man pages show the range as explicitly 0 to 2^31-1 > as your box does. On my SCO 5.0.4 box, rand() from the man page... The rand function uses a multiplicative congruential random-number generator with period 2^32 that returns successive pseudo-random numbers in the range from 0 to (2^15)-1. The following functions define the semantics of the functions rand and srand. static unsigned long int next = 1; int rand() { next = next * 1103515245 + 12345; return ((unsigned int)(next/65536) % 32768); } void srand(seed) unsigned int seed; { next = seed; } -- Dave Smith Candata Systems Ltd. (416) 493-9020 dave@candata.com
В списке pgsql-hackers по дате отправления: