为什么浮点数有符号零?
为什么双打有和?背景和意义是什么?-0
+0
-0
(通常)被视为*******。当负浮点数非常接近零以至于可以考虑时,它可能会导致(为了清楚起见,我指的是算术下溢,并且以下计算的结果被解释为精确,而不仅仅是非常小的数字)。例如:0
0
±0
System.out.println(-1 / Float.POSITIVE_INFINITY);
-0.0
如果我们考虑具有正数的相同情况,我们将收到我们的好旧:0
System.out.println(1 / Float.POSITIVE_INFINITY);
0.0
下面是一个使用会导致与使用时不同的情况:-0.0
0.0
System.out.println(1 / 0.0);
System.out.println(1 / -0.0);
Infinity -Infinity
如果我们考虑函数1 / x
,这是有道理的。当 x
从 +
侧接近时,我们应该得到正无穷大,但是当它从 -
-侧接近时,我们应该得到负无穷大。函数的图形应该清楚地表明这一点:0
(源)
在数学术语中:
这说明了计算意义上的一个显著差异。0
-0
以下是一些相关资源,其中一些已经提出。为了完整起见,我将它们包括在内:
来自维基百科
有符号零为零,并带有关联的符号。在普通算术中,.在计算中,存在在某些数字表示中存在两个零的概念,通常用和'+0'表示,分别表示负零和正零(源)。
−0 = +0 = 0
−0
+0
这发生在整数的符号和量级以及 1 的补码有符号数表示形式中,以及大多数浮点数表示形式中。数字 0 通常编码为 +0,但可以用 +0 或 −0 表示。
根据,负零和正零应该与通常的(数字)比较运算符进行比较,如C和Java的==运算符。(来源)。
IEEE 754 standard
当您有一个浮点运算,该运算产生的结果为接近零的负浮点数,但不能表示(由计算机)时,它将产生“-0.0”。例如 -.5.0 / Float.POSITIVE_INFINITY -> -0.0
和 之间的这种区别为最终用户提供了更多信息,而不仅仅是显示 的最终结果。当然,这样的概念实际上只在具有有限数值表示限制的系统中有用,例如计算机的系统。在数学中,人们可以表示任何数字,无论它与零有多接近。-0.0
+0.0
0
−0
并且是计算机执行的导致下溢的数学运算的结果,类似于或由导致溢出的运算导致的运算。对于导致数学不确定的运算,结果是 NaN(例如,0/0)。+0
−00
+00
-0.0 和 0.0 之间有什么区别?
实际上,两者都代表 .此外,(-0.0 == 0.0) 返回 true。不过:0
1/-0.0
产生 -无穷大,同时产生无穷大。1/0.0
3 * (+0)
= +0 和 = -0。在对有符号零执行乘法或除法时,符号规则适用。+0/-3
强制阅读“每个计算机科学家应该知道的浮点算术”。