我知道 JavaScript 有一个正常的零 0(称为正零 +0)和负零 -0,但是我从未遇到过必须使用 -0 的情况。
有一些关于堆栈溢出的现有帖子关于正零和负零是如何相似/不同的,但它们都没有解释现实生活中的用例/示例。
我知道 JavaScript 有一个正常的零 0(称为正零 +0)和负零 -0,但是我从未遇到过必须使用 -0 的情况。
有一些关于堆栈溢出的现有帖子关于正零和负零是如何相似/不同的,但它们都没有解释现实生活中的用例/示例。
假设我们正在研究这个函数y = 1/x
,并且我们想知道当 x 很小时它的行为。让我们x=1, x=0.1, x=0.01
计算函数:
x = 1;
while(x) {
x /= 10;
document.write(x + ' ' + 1/x + '<br>');
}
如您所见,它接近正无穷大。1/x
等于,Infinity
因为在某些时候x
变得如此之小以至于无法与0
和区分1/0 = Infinity
。请注意,这是“正”无穷大,即“一个非常大的数字”。
现在,让我们从而-1
不是开始x=1
:
x = -1;
while(x) {
x /= 10;
document.write(x + ' ' + 1/x + '<br>');
}
现在的答案是-Infinity
,即函数趋向于负无穷大,“一个很小的数”。当然,这也是正确的,但是计算机是怎么得到的呢?我们刚刚学到了1/0 = (positive) Infinity
?秘诀是最后一个片段中的零实际上是负数,所以x
在最后一次迭代中是-0
而不是只是0
,并且1/-0
给出-Infinity
。如果没有带符号的零,最后一个片段会给出不正确的结果。
希望能解释一下。
包含该标志有科学原因,您可以在wikipedia上更深入地阅读。
来自关于签名零的维基百科文章:
非正式地,可以使用符号“-0”表示舍入为零的负值。当负号很重要时,此符号可能很有用;例如,在将摄氏温度制成表格时,负号表示低于冰点。
在统计力学中,有时使用负温度来描述具有人口反转的系统,可以认为其温度大于正无穷大,因为人口分布函数中的能量系数是-1/温度。在这种情况下,-0的温度是比任何其他负温度都大的(理论)温度,对应于(理论)最大可能的人口反转程度,与+0相反。[5]"