]> granicus.if.org Git - python/commitdiff
Correction to vonmisesvariate() by Magnus Kessler: it should take and
authorGuido van Rossum <guido@python.org>
Mon, 6 Apr 1998 14:12:13 +0000 (14:12 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 6 Apr 1998 14:12:13 +0000 (14:12 +0000)
return something between 0 and 2*pi.  Also added a reference to the
literature.

Lib/random.py

index 49921cb8b343172787fc61815b2c14a03c48c222..221bef6d9cfa370cd4324fbc5bb01f932bddcfb7 100644 (file)
@@ -79,10 +79,17 @@ TWOPI = 2.0*pi
 verify('TWOPI', 6.28318530718)
 
 def vonmisesvariate(mu, kappa):
-       # mu:    mean angle (in radians between 0 and 180 degrees)
+       # mu:    mean angle (in radians between 0 and 2*pi)
        # kappa: concentration parameter kappa (>= 0)
-       
        # if kappa = 0 generate uniform random angle
+
+       # Based upon an algorithm published in: Fisher, N.I.,
+       # "Statistical Analysis of Circular Data", Cambridge
+       # University Press, 1993.
+
+       # Thanks to Magnus Kessler for a correction to the
+       # implementation of step 4.
+
        if kappa <= 1e-6:
                return TWOPI * random()
 
@@ -104,11 +111,11 @@ def vonmisesvariate(mu, kappa):
 
        u3 = random()
        if u3 > 0.5:
-               theta = mu + 0.5*acos(f)
+               theta = (mu % TWOPI) + acos(f)
        else:
-               theta = mu - 0.5*acos(f)
+               theta = (mu % TWOPI) - acos(f)
 
-       return theta % pi
+       return theta
 
 # -------------------- gamma distribution --------------------