Re: Re: [GENERAL] random() function produces wrong range

Поиск
Список
Период
Сортировка
От Peter Eisentraut
Тема Re: Re: [GENERAL] random() function produces wrong range
Дата
Msg-id Pine.LNX.4.21.0008050002340.1568-100000@localhost.localdomain
обсуждение исходный текст
Ответы Re: Re: [GENERAL] random() function produces wrong range  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Tom Lane writes:

> 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().

rand() and RAND_MAX are defined by ANSI C, random() is a BSD-ism. I
suggest you use the former. Also, while you're at it, this is a snippet
from the C FAQ:

13.16:  How can I get random integers in a certain range?
A:      The obvious way,               rand() % N              /* POOR */       (which tries to return numbers from 0
toN-1) is poor, because       the low-order bits of many random number generators are       distressingly *non*-random.
(See question 13.18.)  A better       method is something like               (int)((double)rand() / ((double)RAND_MAX +
1)* N)       If you're worried about using floating point, you could use               rand() / (RAND_MAX / N + 1)
Both methods obviously require knowing RAND_MAX (which ANSI       #defines in <stdlib.h>), and assume that N is much
lessthan       RAND_MAX.       (Note, by the way, that RAND_MAX is a *constant* telling you       what the fixed range
ofthe C library rand() function is.  You       cannot set RAND_MAX to some other value, and there is no way of
requestingthat rand() return numbers in some other range.)       If you're starting with a random number generator
whichreturns       floating-point values between 0 and 1, all you have to do to get       integers from 0 to N-1 is
multiplythe output of that generator       by N.       References: K&R2 Sec. 7.8.7 p. 168; PCS Sec. 11 p. 172.
 


-- 
Peter Eisentraut                  Sernanders väg 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden



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

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: Re: New Privilege model purposal
Следующее
От: The Hermit Hacker
Дата:
Сообщение: Re: Installation layout idea