我们在 Python 中发现坐标变换和其他类似计算中偶尔出现的错误,这些错误会产生-0.0
. 这在 Python 中有什么用途?到目前为止,它创建了一个零测试错误(即,-0.0
不等于0.0
;它等于+0.0
?)。
简单的测试在提示符下:
>>> -1*0.0
我们在 Python 中发现坐标变换和其他类似计算中偶尔出现的错误,这些错误会产生-0.0
. 这在 Python 中有什么用途?到目前为止,它创建了一个零测试错误(即,-0.0
不等于0.0
;它等于+0.0
?)。
简单的测试在提示符下:
>>> -1*0.0
浮点数(根据几乎所有编程语言使用的标准1)在尾数、指数和符号位中以一定数量的位存储。因此,浮点数可以在零和负零之间产生差异。在几乎所有应用程序中,这没有什么区别。例如,在 Python 提示符下,您会得到
>>> 0.0
0.0
>>> -1*0.0
-0.0
>>> -1*0.0 == 0.0
True
所以两者比较相等。
为什么数字没有标准化,只有一个零?因为有时你想知道一个数字是否可能已经通过下溢获得。例如:
>>> 1e-300/1e300
0.0
>>> -1e-300/1e300
-0.0
(这是因为指数中只有这么多位,并且可以存储的最小的幅度数约为1e-308
,因此上述计算的结果向下舍入为零。)
当然,完全不同的可能性是,您的数字确实与零不同,但非常小,并且无论出于何种原因,您已将系统设置为使小于某个值的所有内容都打印为零。在这些情况下,即使变量a
和b
显示为零(可能带有符号),它们实际上也不为零,因此比较不相等。
1供您参考和进一步研究,标准为IEEE 754。