我从未理解为什么-0
分开处理而不是0
。
有趣的是,0
与-0
> 0 === -0
true
然后,问题是:为什么-0
treated separately比0
和+0
?
0
之前的标志是否重要?
在数学中+0
是一个比0
略大的值。此外,-0
是一个略低于0
的值。例如:n / Infinity
将返回+0
和n / -Infinity
-0
(假设n
是大于0的实数)。这种情况发生在数学中。
答案 0 :(得分:1)
"Branch Cuts for Complex Elementary Functions or Much Ado About Nothing's Sign Bit "解决了签名零的原因。这种分析告知IEEE-754,它是大多数现代教学集的基础 和编程语言的浮点数行为。
简而言之,许多常见的数字函数可以在带有无符号零的位置处使用带符号的零连续,从而导致更少的NaN
值和更少的特殊情况。分工就是这样一个功能。
然后,问题是:为什么-0分别处理0和+ 0?
为了清楚起见,只有两个零值。 -0和+0。标记(0)
可以替换标记(+0)
,无论它们在何处发生,都不会改变语义。
有趣的事实是0等于-0
0 === -0 true
此行为由IEEE-754强制执行。
测试两个数值是否相同:
function same(x, y) {
if (x === y) {
if (x !== 0) {
return true; // Non-zero values.
} else {
return (1/x === 1/y); // Test signed-ness of zeroes.
}
} else {
return x !== x && y !== y; // Treat NaNs the same
}
}