[python基础] 浮点数乘法的误差问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[python基础] 浮点数乘法的误差问题相关的知识,希望对你有一定的参考价值。

>>> 2.2*3
6.6000000000000005

详细的原理在IEEE 754浮点数标准

 

小数以二进制形式表示时的有穷性导致的,

这不是Python的问题,而是实数的无限精度跟计算机的有限内存之间的矛盾

计算机的内存、cpu寄存器等等这些硬件单元都是有限的只能表示有限位数的二进制位,因此存储的二进制小数就会和实际转换而成的二进制数有一定的误差。(你可以试着将0.3转化为二进制表示,也将出现一个循环小数。)

实际上,大多数情况下,小数在计算机中是以一种类似科学计数法的形式表示的,具体的可以参考一下其他的资料。但即便如此,仍然存在误差。

所以在python中不建议直接将两个浮点数进行大小比较,或者做精确的计算,往往会得到意想不到的结果。

 

关于控制精度的方法可以使用round和decimal模块

 

使用decimal模块计算时:

>>> from decimal import *
>>> Decimal(2.2)*Decimal(3)
Decimal(6.6)

 

相关链接

https://www.zhihu.com/question/25457573

以上是关于[python基础] 浮点数乘法的误差问题的主要内容,如果未能解决你的问题,请参考以下文章

接单日记:理解浮点数运算的误差

pycharm编译乘法计算问题?

Python浮点数误差与解决方法

Python浮点数误差与解决方法

js浮点数精度误差问题,解决方法

python浮点数精度问题