【问题标题】:Python math is wrong [duplicate]Python数学是错误的[重复]
【发布时间】:2012-08-10 15:46:25
【问题描述】:

可能重复:
Python rounding error with float numbers

Python 2.7.3 (v2.7.3:70274d53c1dd, Apr  9 2012, 20:52:43) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> 4.2 - 1.8
2.4000000000000004
>>> 1.20 - 1.18
0.020000000000000018
>>> 5.1 - 4
1.0999999999999996
>>> 5 - 4
1
>>> 5.0 - 4.0
1.0

为什么 Python 的数学会出错?

【问题讨论】:

  • floating points 不涵盖所有实数,他们怎么可能?在任何非平凡的范围内,都有无限数量的实数(甚至是有理数),但只有有限数量的比特来表示它们。所以 python 的数学是正确的 - 对于浮点算术。
  • 阅读此链接的第 14.1 节:docs.python.org/tutorial/floatingpoint.html
  • Python 数学没有错。您不了解计算机上浮点数的表示,也不了解这些数字的算术。阅读其他评论者建议的资源。
  • Python 数学 is 从数学上讲是错误的。只是一直完全正确在计算上是不可行的(像sqrt(2) 这样的数字甚至不能在有限的空间中表示,除非直接将它们编码为像sqrt(2) 这样的东西)。 Python 的浮点运算中的错误已经被接受为“它的完成方式”很长一段时间了,我们只需要作为实用主义的问题来忍受。程序员意识到这一点非常重要,但我们都有这样的困惑。
  • 所有删除投票者,请不要删除一个问题,该问题对遇到类似问题的用户来说是一个很好的路标

标签: python math numbers


【解决方案1】:

你在计算机科学方面达到了一个新的水平,你即将成年。

因此,您现在可以进行下一步了。我已得到 BDFL 他本人的授权,可以向您透露以下超级机密文件。古人先看懂,先破译,现在,你也一样!

The Floating Point Guide

请小心处理此文档!仅与您认识的人分享此信息,得出同样令人费解的结论!


版主备注

此答案不代表 Stack Overflow 上的预期质量标准。然而,它出人意料地发展了自己的生命,现在仅出于历史意义而保存。

【讨论】:

  • 什么是BDFL.?!
  • 您能总结一下您包含的链接吗?仅链接的答案通常不受欢迎。
  • @MartijnPieters 这确实是一个广泛的话题,但如果有一些链接的上下文将有利于网站。我的意思是,其他 79 个人可能是错的,但我支持他们说应该改进这个答案。
  • @TankorSmash:你在这里错过了重点。请注意,任何到达这里的匿名访问者(在 google 上搜索“Python 数学错误”)都已被重定向到规范帖子,所有这些信息都已经存在。这篇文章从来都不是一个严肃的答案,它已经开始了自己的生活。就像parsing HTML with regex answer 一样,这并没有完全不同。总结链接的内容会大大改变这种性质。
【解决方案2】:

要获得关于浮点运算如何工作的极其严格的指南,以及如何计算答案中的误差有多大的完整说明,您需要:

What Every Computer Scientist Should Know About Floating-Point Arithmetic

读完之后,你应该去寻找关于 8087 的注释,因为它对 IEEE 754 的实现很差,这可能会给你的生活带来新的令人兴奋的问题。

【讨论】:

  • IEEE 754 在 8087 之后诞生。批评 8087 未能达到发明时并不存在的标准似乎很苛刻!
  • 8087 被用作 IEEE754 的基础。 80387 及其后续产品随后实施了 IEEE 754。
猜你喜欢
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 2019-10-12
  • 2015-06-05
  • 2017-08-26
  • 2015-09-07
相关资源
最近更新 更多