为什么JavaScript有两种零:+0 和 -0

本文探讨了JavaScript中存在+0和-0的原因,源于IEEE 754标准。两种零在特定计算中表现出不同,如1除以+0和-0会得到正无穷和负无穷。在JavaScript中,可以通过特定比较方法来区分它们,并且在机器学习和编译器开发等场景中,区分这两种零具有重要意义。
摘要由CSDN通过智能技术生成

你知道在JavaScript中有两个有效的值可以代表零吗?

positiveZero = +0;
negativeZero = -0;

0 在数学上的意义是某种量的缺失,因此它带不带正负号也是没有意义的。+0 = -0 = 0。但依靠 IEEE 754 标准表达数值的计算机在这方面却有短板。

多数编程语言都有两种零!

IEEE 754 浮点数标准允许 0 带有正负号,也使得 +0 和 -0 可以同时存在。对应的,1 / +0 = +∞ 而 1 / -0 = -∞。这里的正无限和负无限可以理解为数轴两侧的“尽头”。

  • +0 和 -0 可以看作两个大小为零但方向相反的向量
  • 求一个函数于 +0 或 -0 的极限就是求这个函数从指定方向接近 0 的值(右极限、左极限)

这两种“零”也导致我们在上面的例子中得到了两种不同的“无限”。

IEEE 754 为什么有两种零

无论一个数的大小是否为零,都有一比特表示它的正负。因此当一个负数的大小被设为零,又没有特意变号时,这个数就变成了 -0。

这又有什么关系呢?好吧,JavaScript实现的就是 IEEE 754 标准,本篇文章亦深挖其中的细节。

请注意,JavaScript(和大多数编程语言)的正零(+0)是默认的零值。

JavaScript 中的零

表达

let a = -0;
a; // -0

let b = +0;
b; // 0

如何得到 +0 和 -0

任何数学运算都可能根据操作数的值得到带符号的零(+0 或 -0)。

唯一的例外是 +0 和 -0 互相加减时,

  • 两个 -0 相加,结果永远是 -0
  • -0 减去 0 结果还是 -0

零的其他排列组合都会得到正零。另外需要注意的是,两个非零数相加减永远不会产生负零,即 -3 + 3 = 3 - 3 = +0。

更多例子参考以下代码:

/*  加减运算  */
3 - 3;         //  0
-3 + 3;        //  0

/*  零零相加  */
-0 + -0;       // -0
-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值