1

为什么在 Python 2.6 和 Python 2.7 中使用 Random.random() 时精度不同

例子:

import random
import sys

rng = random.Random(0)

print sys.version
for i in range(10):
    print repr(rng.random())

2.6.6(r266:84297,2010 年 8 月 24 日,18:46:32)[MSC v.1500 32 位(英特尔)]
0.84442185152504812
0.75795440294030247
0.420571580830845

2.7.5(默认,2013 年 5 月 15 日,22:43:36)[MSC v.1500 32 位(英特尔)]
0.8444218515250481
0.7579544029403025
0.420571580830845

为什么会有不同的精度?这可能是因为这种变化: http ://docs.python.org/2/tutorial/floatingpoint.html#representation-error

在 Python 2.7 和 Python 3.1 之前的版本中,Python 将此值四舍五入为 17 位有效数字,给出“0.10000000000000001”。在当前版本中,Python 显示基于正确四舍五入为真正二进制值的最短十进制小数的值,结果简单地为“0.1”。

4

1 回答 1

5

返回的数字random()是相同的。不同的是显示精度。

这是我的 Python 2.7 返回的前两个数字,但显示的十进制数字明显多于默认数字:

$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> rng = random.Random(0)
>>> '%.50f' % rng.random() 
'0.84442185152504811718188193481182679533958435058594'
>>> '%.50f' % rng.random() 
'0.75795440294030247407874867349164560437202453613281'

如果将这些四舍五入到小数点后 17 位,您将获得与从 Python 2.6 获得的完全相同的数字。

于 2013-10-14T14:34:37.613 回答