Python3中的浮点算法和等式测试

Python3中的浮点算法和等式测试,python,python-3.x,floating-accuracy,Python,Python 3.x,Floating Accuracy,我注意到python3说: 1.1+2.2为3.30000000003 2.2+4.4等于6.6000000000000005 1.1+2.3等于3.4 2.2+4.3等于6.5 等等 据我所知,浮点运算并不完全准确 因此,例如,1.1可能无法在float类型中完美表示 然而,关于形式为x+2x的查询,似乎存在一些异常不准确的地方。有没有一个简单的直觉来解释原因?根据Python,它使用十进制数的近似值。这就是为什么某些数学上正确的方程在Python中可能不正确的原因 多谢各位。对但为什么

我注意到python3说:

  • 1.1+2.2为3.30000000003
  • 2.2+4.4等于6.6000000000000005
  • 1.1+2.3等于3.4
  • 2.2+4.3等于6.5
  • 等等
据我所知,浮点运算并不完全准确

因此,例如,1.1可能无法在float类型中完美表示


然而,关于形式为x+2x的查询,似乎存在一些异常不准确的地方。有没有一个简单的直觉来解释原因?

根据Python,它使用十进制数的近似值。这就是为什么某些数学上正确的方程在Python中可能不正确的原因

多谢各位。对但为什么计算x+2x的误差明显大于计算x+4x的误差?我不知道,但我认为这是由二进制64格式引起的。这主要是巧合。Python向您隐藏了一些错误;它并不是打印所有数字,只是它认为需要显示与实际值“足够接近”的值。如果它打印出显示计算机内部计算的准确值所需的所有数字,那么您会看到1.1+2.3有一些错误,就像1.1+2.2一样。1.1和2.2中的错误仅略大于其他示例中的错误,仅足以触发标准以打印更多数字。进一步解释:在计算1.1+2.2时,有三个错误是由舍入引起的。首先,将1.1转换为内部格式。然后将2.2转换为内部格式。然后,当它们被添加时,精确的数学结果被四舍五入为内部格式。如果这三个误差都在同一个方向上,那么它们产生的总误差将大于其中一些恰好在相反方向上产生的总误差。所以,1.1可能会稍微四舍五入,2.2可能会稍微四舍五入,它们的总和也碰巧会四舍五入,所以会出现很多错误。可能是2.3四舍五入,所以1.1+2.3得到了一些错误的抵消。我不同意这个问题是完全重复的。建议的原文一般解释了浮点算法是一种近似算法。这个问题询问具体的错误。