python减法精确度不准是什么问题,聊聊Python中的浮点数运算不准确问题

本文探讨了Python中浮点数运算不精确的问题,例如1.1 - 1的结果不是0.1。这并非Python的bug,而是由于浮点数在计算机中的二进制表示导致的不精确性。文章解释了浮点数的二进制表示困难,如1/10在二进制下是无限循环小数,以及IEEE-754标准的限制。并介绍了使用round()函数进行四舍五入时可能出现的反直觉情况,以及如何通过decimal模块实现浮点数的精确计算。
摘要由CSDN通过智能技术生成

大家好,老 Amy 来了。之前就意识到一个问题,但是最近又有朋友提出来了,所以就想着干脆记录下来,分享给大家叭~

啥问题呢?请看题:

8574d66a7c7b63f04d24a8ef4a059fa1.png

也就是说,需要大家计算1.1-1的值,很多朋友会说:“emmm…这还不简单,玩我呢?不就是0.1嘛”

但是如果你用 python 去执行一下,会发现结果跟你想的不太一样,如下图:

7d08ec9a38b40942259f1d50b1c6f065.png

这样大家是不是发现了什么问题?是的,浮点数在运算过程中并没有保证完全精确,是什么原因导致了这种现象呢?很多朋友就会窃喜:“这不就是 Python 的 bug 嘛~”

但实际上,这并不是 Python 中的 bug ,它和计算机硬件中如何处理浮点数有关。浮点数在计算机硬件中以二进制的形式存在,但是我们现在看到的都是十进制,而十进制的浮点数不能都完全精确的表示为二进制小数。

就比如说我们在十进制数中无法用小数精确表示 1/3 一样,在二进制数中也无法用小数精确表示 1/10。显然这样子的说明并没有十进制中的 1/3 那么直观,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值