之前就意识到一个问题,但是最近又有朋友提出来了,所以就想着干脆记录下来,分享给大家
啥问题呢?请看题:

也就是说,需要大家计算1.1-1的值,很多朋友会说:“emmm…这还不简单,玩我呢?不就是0.1嘛”
但是如果你用 python 去执行一下,会发现结果跟你想的不太一样,如下图:

这样大家是不是发现了什么问题?是的,浮点数在运算过程中并没有保证完全精确,是什么原因导致了这种现象呢?很多朋友就会窃喜:“这不就是 Python 的 bug 嘛~”
但实际上,这并不是 Python 中的 bug ,它和计算机硬件中如何处理浮点数有关。浮点数在计算机硬件中以二进制的形式存在,但是我们现在看到的都是十进制,而十进制的浮点数不能都完全精确的表示为二进制小数。
就比如说我们在十进制数中无法用小数精确表示 1/3 一样,在二进制数中也无法用小数精确表示 1/10。显然这样子的说明并没有十进制中的 1/3 那么直观,接下来我们尝试去计算一下二进制中的 1/10

本文探讨了Python中浮点数运算产生的不精确性,如1.1-1的结果不等于0.1,原因是浮点数在计算机硬件中以二进制表示,某些十进制浮点数无法精确转换为二进制。介绍了IEEE-754浮点运算标准的影响,并讨论了四舍五入的局限性。最后,推荐使用decimal模块进行精确的浮点数计算。
最低0.47元/天 解锁文章

1021

被折叠的 条评论
为什么被折叠?



