为什么在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位(Intel)]
  0.84442185152504812
  0.75795440294030247
  0.420571580830845
  
  2.7.5(默认,2013年5月15日,22:43:36)[MSC v.1500 32位(Intel)]
  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”。

最佳答案

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获得的数字完全相同的数字。

关于python - 在python 2.6和python 2.7上使用random的不同浮点精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19362655/

10-12 16:38
查看更多