为什么 121.0 - 121.0 returns 2.84217094304e-14 在 python 中?
Why 121.0 - 121.0 returns 2.84217094304e-14 in python?
我有两个变量:
result = 121.0 # initialized in code, assigned in loop
dd = -121.0 # value returned from result of function
所以,当我这样做时
result += dd
结果变成2.84217094304e-14(这个数字表示的名字和阅读算法欢迎)
但是当我在 python 控制台中分配相同的值时 - 它 returns 正确的结果 - 0.0
有什么问题?
您的数字可能 看起来 为 121.0
和 -121.0
,但这是印刷不准确造成的。我相信这种情况发生在早期 Python 版本(print
使用的 repr
中,尽管您可能在其他地方明确地舍入了它们的表示形式。
当您将它们相加时,误差不再四舍五入,差异是可见的。如果您确实拥有您声称的值,您将得到 0.0
.
请注意,尽管在某些情况下您可能会从浮点计算中获得完全准确的结果,但通常无法获得完全准确的结果。如果这些计算有误,您需要手动考虑。
浮点数完全没问题。这是因为浮点数是如何在硬件中实现的,它与 Python 本身无关。在 Python 2.7 和 Python 3.1+ 的更高版本中,显示逻辑得到了改进,并且通常以更有意识的方式打印,尽管在机器内存中数字仍然以相同的方式保存。
这就是为什么您不想使用浮点数来表示货币,而是使用小数。 ;)
了解更多信息:
http://docs.python.org/2/tutorial/floatingpoint.html
如果您真的很关心并且有时间,那么 Oracle 文档中有一篇很重要的文章。
我有两个变量:
result = 121.0 # initialized in code, assigned in loop
dd = -121.0 # value returned from result of function
所以,当我这样做时
result += dd
结果变成2.84217094304e-14(这个数字表示的名字和阅读算法欢迎)
但是当我在 python 控制台中分配相同的值时 - 它 returns 正确的结果 - 0.0
有什么问题?
您的数字可能 看起来 为 121.0
和 -121.0
,但这是印刷不准确造成的。我相信这种情况发生在早期 Python 版本(print
使用的 repr
中,尽管您可能在其他地方明确地舍入了它们的表示形式。
当您将它们相加时,误差不再四舍五入,差异是可见的。如果您确实拥有您声称的值,您将得到 0.0
.
请注意,尽管在某些情况下您可能会从浮点计算中获得完全准确的结果,但通常无法获得完全准确的结果。如果这些计算有误,您需要手动考虑。
浮点数完全没问题。这是因为浮点数是如何在硬件中实现的,它与 Python 本身无关。在 Python 2.7 和 Python 3.1+ 的更高版本中,显示逻辑得到了改进,并且通常以更有意识的方式打印,尽管在机器内存中数字仍然以相同的方式保存。
这就是为什么您不想使用浮点数来表示货币,而是使用小数。 ;)
了解更多信息:
http://docs.python.org/2/tutorial/floatingpoint.html
如果您真的很关心并且有时间,那么 Oracle 文档中有一篇很重要的文章。