python浮点数运算问题_python基础教程之. 浮点数运算:问题和局限

14. 浮点数运算:问题和局限¶

浮点数在计算机硬件中表示为以 2 为底(二进制)的小数。例如,十进制小数

0.125

是1/10 + 2/100 + 5/1000 的值,同样二进制小数

0.001

是 0/2 + 0/4 + 1/8 的值。这两个小数具有相同的值,唯一真正的区别是,第一个小数是十进制表示法,第二个是二进制表示法。

不幸的是,大多数十进制小数不能完全用二进制小数表示。结果是,一般情况下,你输入的十进制浮点数仅由实际存储在计算机中的近似的二进制浮点数表示。

这个问题在十进制情况下很容易理解。考虑分数 1/3,你可以用十进制小数近似它:

0.3

或者更接近的

0.33

或者再接近一点的

0.333

等等。无论你愿意写多少位数字,结果永远不会是精确的 1/3,但将会越来越好地逼近 1/3。

同样地,无论你使用多少位的二进制数,都无法确切地表示十进制值 0.1。1/10 用二进制表示是一个无限循环的小数。

0.0001100110011001100110011001100110011001100110011...

在任何有限数量的位停下来,你得到的都是近似值。

在一台运行 Python 的典型机器上, Python 浮点数具有 53 位的精度,所以你输入的十进制数0.1存储在内部的是二进制小数

0.00011001100110011001100110011001100110011001100110011010

非常接近,但不完全等于 1/10。

由于解释器显

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值