Commit 9aaeb5e0 authored by Mark Dickinson's avatar Mark Dickinson

Issue #17149: Fix random.vonmisesvariate to always return results in [0, 2*math.pi].

parent f898038c
...@@ -475,9 +475,9 @@ class Random(_random.Random): ...@@ -475,9 +475,9 @@ class Random(_random.Random):
u3 = random() u3 = random()
if u3 > 0.5: if u3 > 0.5:
theta = (mu % TWOPI) + _acos(f) theta = (mu + _acos(f)) % TWOPI
else: else:
theta = (mu % TWOPI) - _acos(f) theta = (mu - _acos(f)) % TWOPI
return theta return theta
......
...@@ -533,6 +533,20 @@ class TestDistributions(unittest.TestCase): ...@@ -533,6 +533,20 @@ class TestDistributions(unittest.TestCase):
self.assertAlmostEqual(s1/N, mu, 2) self.assertAlmostEqual(s1/N, mu, 2)
self.assertAlmostEqual(s2/(N-1), sigmasqrd, 2) self.assertAlmostEqual(s2/(N-1), sigmasqrd, 2)
def test_von_mises_range(self):
# Issue 17149: von mises variates were not consistently in the
# range [0, 2*PI].
g = random.Random()
N = 100
for mu in 0.0, 0.1, 3.1, 6.2:
for kappa in 0.0, 2.3, 500.0:
for _ in range(N):
sample = g.vonmisesvariate(mu, kappa)
self.assertTrue(
0 <= sample <= random.TWOPI,
msg=("vonmisesvariate({}, {}) produced a result {} out"
" of range [0, 2*pi]").format(mu, kappa, sample))
class TestModule(unittest.TestCase): class TestModule(unittest.TestCase):
def testMagicConstants(self): def testMagicConstants(self):
self.assertAlmostEqual(random.NV_MAGICCONST, 1.71552776992141) self.assertAlmostEqual(random.NV_MAGICCONST, 1.71552776992141)
......
...@@ -202,6 +202,9 @@ Core and Builtins ...@@ -202,6 +202,9 @@ Core and Builtins
Library Library
------- -------
- Issue #17149: Fix random.vonmisesvariate to always return results in
the range [0, 2*math.pi].
- Issue #1470548: XMLGenerator now works with UTF-16 and UTF-32 encodings. - Issue #1470548: XMLGenerator now works with UTF-16 and UTF-32 encodings.
- Issue #6975: os.path.realpath() now correctly resolves multiple nested - Issue #6975: os.path.realpath() now correctly resolves multiple nested
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment