在Python 3中进行精确的浮点除法

时间:2016-11-25 15:47:38

标签: python floating-point

有没有办法在Python中进行准确的浮点除法?

假设我尝试进行以下数学运算。

  1. 0.6 / 0.3返回2.0,这是正确的。很酷,看起来数学工作正常!
  2. 0.6 / 0.2是正确的结果时,
  3. 2.9999999999999996会返回3.0
  4. 0.6 / 0.1为正确结果时,
  5. 5.999999999999999会返回6.0
  6. 我想知道这个问题是否有一个简单的解决方案,我完全不知道了?

    注意:我已经看到了Is floating point math broken?的答案,尽管许多答案在解释浮点运算方面做得非常出色,但似乎任何响应都没有提供关于如何准确执行的实际解决方案在Python中使用浮点值进行除法。

1 个答案:

答案 0 :(得分:2)

Python的decimal库提供了在浮点除法提供不太准确的结果时计算更准确结果的功能。

这是一个示例,显示decimal库将正确的结果返回到分割的几个浮点值。

from decimal import Decimal
  1. Decimal('0.6') / Decimal('0.3')返回Decimal('2')这是正确的。
  2. Decimal('0.6') / Decimal('0.2')返回Decimal('3')这是正确的。
  3. Decimal('0.6') / Decimal('0.1')返回Decimal('6')这是正确的。
  4. 正如@JohnColeman指出的那样,使用十进制模块进行这些计算将提供更多的获得结果,但代价是执行这些计算的速度。