繁体   English   中英

Python数组中的浮点精度

[英]Floating point precision in Python array

对于真正简单而愚蠢的问题,我深表歉意。 但是,为什么在这两种情况下显示的精度有所不同?

1)

>> test = numpy.array([0.22])
>> test2 = test[0] * 2
>> test2
0.44

2)

>> test = numpy.array([0.24])
>> test2 = test[0] * 2
>> test2
0.47999999999999998

我在64位linux上使用python2.6.6。 预先感谢您的帮助。

这似乎也适用于python中的列表

>>> t = [0.22]
>>> t
[0.22]

>>> t = [0.24]
>>> t
[0.23999999999999999]

因为它们是不同的数字,并且不同的数字具有不同的舍入效果。

(实际上,右侧的所有“相关”问题都将解释舍入效应本身的原因。)


好吧,更严肃的答案。 似乎numpy对数组中的数字执行了一些转换或计算:

>>> t = numpy.array([0.22])
>>> t[0]
0.22


>>> t = numpy.array([0.24])
>>> t[0]
0.23999999999999999

而Python不会自动执行此操作:

>>> t = 0.22
>>> t
0.22

>>> t = 0.24
>>> t
0.24

舍入误差小于numpy的float的“ eps”值,这意味着应将其视为相等(实际上是):

>>> abs(numpy.array([0.24])[0] - 0.24) < numpy.finfo(float).eps
True

>>> numpy.array([0.24])[0] == 0.24
True

但是Python之所以将其显示为'0.24'而不是numpy的原因是因为Python的默认float.__repr__方法使用的精度较低(这是IIRC,这是最近的更改):

>>> str(numpy.array([0.24])[0])
0.24

>>> '%0.17f' % 0.24
'0.23999999999999999'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM