我一直不明白为什么-0
分别对待0
.
有趣的事实是0
等于-0
> 0 === -0
true
那么问题来了:为什么-0
分别对待 https://stackoverflow.com/a/23368135/1420197 than 0
and +0
?
之前的标志有没有什么情况0
重要吗?
在数学方面+0
是一个略大于0
. Also, -0
是一个略低于0
。例如:n / Infinity
会回来+0
and n / -Infinity
-0
(假设n
是大于0的实数)。这发生在数学中。
“复杂基本函数的分支削减或无事生非的符号位” http://people.freebsd.org/%7Edas/kahan86branch.pdf解决了有符号零的原因。这种分析为 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
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)