有没有办法在Python中进行准确的浮点除法?
假设我尝试进行以下数学运算。
0.6 / 0.3
返回2.0
,这是正确的。很酷,看起来数学工作正常!0.6 / 0.2
是正确的结果时,2.9999999999999996
会返回3.0
。0.6 / 0.1
为正确结果时,5.999999999999999
会返回6.0
。 我想知道这个问题是否有一个简单的解决方案,我完全不知道了?
注意:我已经看到了Is floating point math broken?的答案,尽管许多答案在解释浮点运算方面做得非常出色,但似乎任何响应都没有提供关于如何准确执行的实际解决方案在Python中使用浮点值进行除法。
答案 0 :(得分:2)
Python的decimal库提供了在浮点除法提供不太准确的结果时计算更准确结果的功能。
这是一个示例,显示decimal
库将正确的结果返回到分割的几个浮点值。
from decimal import Decimal
Decimal('0.6') / Decimal('0.3')
返回Decimal('2')
这是正确的。Decimal('0.6') / Decimal('0.2')
返回Decimal('3')
这是正确的。Decimal('0.6') / Decimal('0.1')
返回Decimal('6')
这是正确的。正如@JohnColeman指出的那样,使用十进制模块进行这些计算将提供更多的获得结果,但代价是执行这些计算的速度。