为什么在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/