编程:从入门到放弃
    前言
    语言和环境
    +=
    C和C++
    Hex
    Map
    Scope(1):"这"是啥
    Scope(2)
    Singleton
    什么顺序
    从A到Z
    函数
    切分字符串
    初始化(1)
    初始化(2)
    单引号,还是双引号
    参数传递
    左,还是右
    引用
    时间(1)
    时间(2)
    时间(3)
    时间(4)
    时间(5)
    比大小
    流氓甘地
    相等,还是不等(1)
    相等,还是不等(2)
    相等,还是不等(3)
    相等,还是不等(4)
    第一个说了算,还是最后一个
    语言和环境
    除以0
    随机数

除以0

Updated: 2022-04-25

入门。

数学课上我们都学过,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 就没有整数,都被当做浮点数处理。

PHP/Hack 会给出一个 Warning,但返回的是...false

hphpd> = 12 / 0

Warning: Division by zero
false

进阶!

C/C++里除以 0 是没有被定义的,什么事情都可能发生...