【问题标题】:Floating point addition in Python [duplicate]Python中的浮点加法[重复]
【发布时间】:2013-11-03 14:04:33
【问题描述】:

为什么 Python 中的后一种情况不会产生结果 3.3

>>> 1.0 + 2.3
3.3
>>> 1.1 + 2.2
3.3000000000000003

这里发生的事情对我来说似乎没有任何意义。对于通过1.0 + 2.3 而不是通过1.1 + 2.2 获得的相同结果的表示,这里有什么限制?

【问题讨论】:

标签: python floating-point


【解决方案1】:

引用documentation

不幸的是,大多数十进制分数不能完全表示为二进制分数。结果是,通常,您输入的十进制浮点数仅与实际存储在机器中的二进制浮点数近似。

而您偶然发现的只是众多特质之一:

>>> 1.1 + 1.1
2.2
>>> 1.1 + 2.3
3.4
>>> 1.1 + 2.2
3.3000000000000003

事实上,这是一种罕见的情况,我很难找到其他情况。这是另一个奇怪的:

>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17

使用 Python 的 decimal 类会得到更好的结果。

【讨论】:

  • 或十进制模块
  • 我给了你 +1 但numpy 在这里不是一个好的解决方案。 numpy 仍然使用二进制浮点数。 decimal 库将在此处提供精确的解决方案,因为 decimal 完全对十进制值进行操作。
  • 我认为 python 通常只使用 IEE754,并且可能也使用 numpy。你能举个例子吗?也许你在想例如sympy.mpmath.
  • +1 0.1 + 0.1 + 0.1 - 0.3 :)
  • @steveha @Benjamin 你们是对的。这是我的错误,我认为 numpy 的精度更高,但事实证明这并不完全正确。 Decimal 更精确,但也不是那么精确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
相关资源
最近更新 更多