diff --git a/Lib/random.py b/Lib/random.py index 03dadf2514a..4ddac4c3955 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -282,7 +282,7 @@ def normalvariate(self, mu, sigma): random = self.random while True: u1 = random() - u2 = random() + u2 = 1.0 - random() z = NV_MAGICCONST*(u1-0.5)/u2 zz = z*z/4.0 if zz <= -_log(u2): @@ -422,7 +422,9 @@ def gammavariate(self, alpha, beta): while True: u1 = random() - u2 = random() + if not 1e-7 < u1 < .9999999: + continue + u2 = 1.0 - random() v = _log(u1/(1.0-u1))/ainv x = alpha*_exp(v) z = u1*u1*u2 @@ -554,7 +556,7 @@ def paretovariate(self, alpha): """Pareto distribution. alpha is the shape parameter.""" # Jain, pg. 495 - u = self.random() + u = 1.0 - self.random() return 1.0 / pow(u, 1.0/alpha) ## -------------------- Weibull -------------------- @@ -567,7 +569,7 @@ def weibullvariate(self, alpha, beta): """ # Jain, pg. 499; bug fix courtesy Bill Arms - u = self.random() + u = 1.0 - self.random() return alpha * pow(-_log(u), 1.0/beta) ## -------------------- Wichmann-Hill -------------------