除以0
入门。
数学课上我们都学过,0 不能做分母。在编程语言中这条规则仍然适用,但程序的反应缺稍有不同:
整数除以整数 0
比如 1/0,那必须是不可以的,程序应该报错
Java:
jshell> 1 / 0
| java.lang.ArithmeticException thrown: / by zero
| at (#4:1)
Python:
>>> 1 / 0
...
ZeroDivisionError: division by zero
分子或分母为浮点数
比如 1.0/0,或 1/0.0,或 1.0/0.0。
0.0 会被当做一个极小的数,无限趋近于 0,所以除的结果是无穷大
Java:
jshell> 1.0 / 0.0
$1 ==> Infinity
Python 会抛一个稍微不同的错。也说得过去。
>>> 1.0 / 0.0
...
ZeroDivisionError: float division by zero
0.0 / 0.0
Python 会给出同样的 ZeroDivisionError,但 Java 不抛错,返回的是 NaN,即 Not-a-Number
jshell> 0.0 / 0.0
$1 ==> NaN
放弃?
到目前为止一切合乎逻辑。直到...
JavaScript 整数除以 0 返回的是无穷大
> 12 / 0
Infinity
因为...javascript 就没有整数,都被当做浮点数处理。
还记得 Java 会返回 Infinity
么?如果把它强制转换为 int
,它就成了 2147483647
。
jshell> 1/0.0
$1 ==> Infinity
jshell> (int)(1/0.0)
$2 ==> 2147483647
jshell> (int)Double.POSITIVE_INFINITY
$3 ==> 2147483647
jshell> (int)Double.POSITIVE_INFINITY==Integer.MAX_VALUE
$4 ==> true
PHP/Hack 会给出一个 Warning,但返回的是...false
hphpd> = 12 / 0
Warning: Division by zero
false
进阶!
C/C++里除以 0 是没有被定义的,什么事情都可能发生...