为什么浮点数有符号零?

2022-08-31 13:00:07

为什么双打有和?背景和意义是什么?-0+0


答案 1

-0(通常)被视为*******。当浮点数非常接近零以至于可以考虑时,它可能会导致(为了清楚起见,我指的是算术下溢,并且以下计算的结果被解释为精确,而不仅仅是非常小的数字)。例如:00±0

System.out.println(-1 / Float.POSITIVE_INFINITY);
-0.0

如果我们考虑具有数的相同情况,我们将收到我们的好旧:0

System.out.println(1 / Float.POSITIVE_INFINITY);
0.0

下面是一个使用会导致与使用时不同的情况:-0.00.0

System.out.println(1 / 0.0);
System.out.println(1 / -0.0);
Infinity
-Infinity

如果我们考虑函数1 / x,这是有道理的。当 x+侧接近时,我们应该得到无穷大,但是当它从 --侧接近时,我们应该得到无穷大。函数的图形应该清楚地表明这一点:0

()

在数学术语中:

enter image description here

enter image description here

这说明了计算意义上的一个显著差异。0-0


以下是一些相关资源,其中一些已经提出。为了完整起见,我将它们包括在内:


答案 2

来自维基百科

有符号零为零,并带有关联的符号。在普通算术中,.在计算中,存在在某些数字表示中存在两个零的概念,通常用和'+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.00

−0并且是计算机执行的导致下溢的数学运算的结果,类似于或由导致溢出的运算导致的运算。对于导致数学不确定的运算,结果是 NaN例如,0/0)。+0−00+00

-0.0 和 0.0 之间有什么区别?

实际上,两者都代表 .此外,(-0.0 == 0.0) 返回 true。不过:0

  1. 1/-0.0产生 -无穷大,同时产生无穷大1/0.0

  2. 3 * (+0) = +0 和 = -0。在对有符号零执行乘法或除法时,符号规则适用。+0/-3

强制阅读“每个计算机科学家应该知道的浮点算术”。