[Python-checkins] python/dist/src/Lib random.py,1.42,1.43
rhettinger@users.sourceforge.net
rhettinger@users.sourceforge.net
Sat, 04 Jan 2003 01:26:35 -0800
Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1:/tmp/cvs-serv18677
Modified Files:
random.py
Log Message:
Correct long standing bugs in the methods for random distributions.
The range of u=random() is [0,1), so log(u) and 1/x can fail.
Fix by setting u=1-random() or by reselecting for a usable value.
Will backport.
Index: random.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/random.py,v
retrieving revision 1.42
retrieving revision 1.43
diff -C2 -d -r1.42 -r1.43
*** random.py 4 Jan 2003 05:20:33 -0000 1.42
--- random.py 4 Jan 2003 09:26:32 -0000 1.43
***************
*** 283,287 ****
while True:
u1 = random()
! u2 = random()
z = NV_MAGICCONST*(u1-0.5)/u2
zz = z*z/4.0
--- 283,287 ----
while True:
u1 = random()
! u2 = 1.0 - random()
z = NV_MAGICCONST*(u1-0.5)/u2
zz = z*z/4.0
***************
*** 423,427 ****
while True:
u1 = random()
! u2 = random()
v = _log(u1/(1.0-u1))/ainv
x = alpha*_exp(v)
--- 423,429 ----
while True:
u1 = random()
! if not 1e-7 < u1 < .9999999:
! continue
! u2 = 1.0 - random()
v = _log(u1/(1.0-u1))/ainv
x = alpha*_exp(v)
***************
*** 555,559 ****
# Jain, pg. 495
! u = self.random()
return 1.0 / pow(u, 1.0/alpha)
--- 557,561 ----
# Jain, pg. 495
! u = 1.0 - self.random()
return 1.0 / pow(u, 1.0/alpha)
***************
*** 568,572 ****
# Jain, pg. 499; bug fix courtesy Bill Arms
! u = self.random()
return alpha * pow(-_log(u), 1.0/beta)
--- 570,574 ----
# Jain, pg. 499; bug fix courtesy Bill Arms
! u = 1.0 - self.random()
return alpha * pow(-_log(u), 1.0/beta)