mirror of
https://github.com/python/cpython.git
synced 2025-08-30 13:38:43 +00:00
random.gauss() uses a piece of hidden state used by nothing else,
and the .seed() and .whseed() methods failed to reset it. In other words, setting the seed didn't completely determine the sequence of results produced by random.gauss(). It does now. Programs repeatedly mixing calls to a seed method with calls to gauss() may see different results now. Bugfix candidate (random.gauss() has always been broken in this way), despite that it may change results.
This commit is contained in:
parent
2b41b0d6a7
commit
46c04e140c
3 changed files with 30 additions and 1 deletions
19
Lib/test/test_random.py
Normal file
19
Lib/test/test_random.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
import test_support
|
||||
import random
|
||||
|
||||
# Ensure that the seed() method initializes all the hidden state. In
|
||||
# particular, through 2.2.1 it failed to reset a piece of state used by
|
||||
# (and only by) the .gauss() method.
|
||||
|
||||
for seed in 1, 12, 123, 1234, 12345, 123456, 654321:
|
||||
for seeder in random.seed, random.whseed:
|
||||
seeder(seed)
|
||||
x1 = random.random()
|
||||
y1 = random.gauss(0, 1)
|
||||
|
||||
seeder(seed)
|
||||
x2 = random.random()
|
||||
y2 = random.gauss(0, 1)
|
||||
|
||||
test_support.vereq(x1, x2)
|
||||
test_support.vereq(y1, y2)
|
Loading…
Add table
Add a link
Reference in a new issue