为什么1/0=无穷大,而1/-0=-无穷大?

4

为什么会这样:

1 === 1;// true
0 === -0;// true
1/0 === 1/-0;// false

原因:

1/0=Infinite;
1/-0=-Infinite;

问题:

为什么 1/0 或 1/-0 不是 UndefinedNaN

它不能是Infinity或-Infinity,因为0等于-0,所以1/0等于1/-0我应该说,但为什么它不是?为什么它不是Undefined(我的计算器上显示的)或NaN。


7
因为IEEE-754标准规定如此。 - Sebastian Simon
可能是为什么Infinity-Infinity等于NaN?的重复。 - Isma
3
因为规范是这样规定的。不要在其中读入任何数学意义,这只是一种被认为对于(程序员)比其他可选方案更有用的约定。 - CertainPerformance
NaN表示“不是一个数字”,但在该操作中,您正在处理数字,因此将两个数字相除并得到“不是一个数字”的结果是没有意义的。 - Isma
2
相关:区分+0和-0+0和-0是否相同? - Sebastian Simon
1个回答

5
这是因为 IEEE 754 规范 就是这样定义的。
然而,这里有一个理由: 仿射扩展实数系统 是通过两个无穷大扩展实数而来的,这给了一些更多利用极限计算的空间。因此,在这个扩展中,除以零不是undefinedNaN
对于正数x,下面式子是成立的:
limx→0(x) = limx→0(-x)
但是对于正数x,下面式子是不成立的
limx→0(1/x) = limx→0(1/-x)
注意上述带有极限符号的比较方式和您列出的比较方式相对应。
0 === -0;// true
1/0 === 1/-0;// false

其次,一个除法运算始终保持以下不变性:当且仅当两个操作数中恰好有一个为负时,结果为负。

这些考虑都表明,在IEEE 754中:

1/0 === Infinity
1/-0 === -Infinity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接