python浮点型精度_Python数组中的浮点精度

I apologize for the really simple and dumb question; however, why is there a difference in precision displayed for these two cases?

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

I'm using python2.6.6 on 64-bit linux.

Thank you in advance for your help.

This also hold seems to hold for a list in python

>>> t = [0.22]

>>> t

[0.22]

>>> t = [0.24]

>>> t

[0.23999999999999999]

解决方案

Because they are different numbers and different numbers have different rounding effects.

(Practically any of the Related questions down the right-hand side will explain the cause of the rounding effects themselves.)

Okay, more serious answer. It appears that numpy performs some transformation or calculation on the numbers in an array:

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

>>> t[0]

0.22

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

>>> t[0]

0.23999999999999999

whereas Python doesn't automatically do this:

>>> t = 0.22

>>> t

0.22

>>> t = 0.24

>>> t

0.24

The rounding error is less than numpy's "eps" value for float, which implies that it should be treated as equal (and in fact, it is):

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

True

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

True

But the reason that Python displays it as '0.24' and numpy doesn't is because Python's default float.__repr__ method uses lower precision (which, IIRC, was a pretty recent change):

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

0.24

>>> '%0.17f' % 0.24

'0.23999999999999999'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值