From: Tim Peters Date: Fri, 26 Jan 2001 06:49:56 +0000 (+0000) Subject: SF bug 130030: Claim of bad betavariate algorithm. X-Git-Tag: v2.1a2~165 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=85e2e4742d0a1accecd02058a7907df36308297e;p=python SF bug 130030: Claim of bad betavariate algorithm. --- diff --git a/Lib/random.py b/Lib/random.py index d098d393cd..a22449cfe6 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -461,14 +461,27 @@ class Random: return mu + z*sigma ## -------------------- beta -------------------- +## See +## http://sourceforge.net/bugs/?func=detailbug&bug_id=130030&group_id=5470 +## for Ivan Frohne's insightful analysis of why the original implementation: +## +## def betavariate(self, alpha, beta): +## # Discrete Event Simulation in C, pp 87-88. +## +## y = self.expovariate(alpha) +## z = self.expovariate(1.0/beta) +## return z/(y+z) +## +## was dead wrong, and how it probably got that way. def betavariate(self, alpha, beta): - - # Discrete Event Simulation in C, pp 87-88. - - y = self.expovariate(alpha) - z = self.expovariate(1.0/beta) - return z/(y+z) + # This version due to Janne Sinkkonen, and matches all the std + # texts (e.g., Knuth Vol 2 Ed 3 pg 134 "the beta distribution"). + y = self.gammavariate(alpha, 1.) + if y == 0: + return 0.0 + else: + return y / (y + self.gammavariate(beta, 1.)) ## -------------------- Pareto -------------------- diff --git a/Misc/ACKS b/Misc/ACKS index 753cc77ba8..95685475af 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -118,7 +118,7 @@ Sebastian Fernandez Nils Fischbeck Doug Fort Robin Friedrich -Ivan Frohe +Ivan Frohne Jim Fulton Geoff Furnish Tadayoshi Funaba @@ -338,6 +338,7 @@ Joel Shprentz Eric Siegerman Paul Sijben Nathan Paul Simons +Janne Sinkkonen George Sipe Kragen Sitaker Rafal Smotrzyk