6

以下代码的输出让我感到困惑。为什么NaN有时和 Infinity 有时?

public static void main (String[] args) {

    double a = 0.0;
    double b = 1.0;
    int c = 0; 
    System.out.println(a/0.0);
    System.out.println(a/0);
    System.out.println(b/0.0);
    System.out.println(b/0);
    System.out.println(c/0.0);
    System.out.println(c/0);
}

输出是:

NaN
NaN
Infinity
Infinity
NaN
Exception in thread "main" java.lang.ArithmeticException: / by zero

这里的决定因素是什么?

4

1 回答 1

5

这是因为IEEE 浮点算术标准 (IEEE 754)是由电气和电子工程师协会 (IEEE) 于 1985 年制定的浮点计算技术标准。


目的:

IEEE 浮点标准,.. 指定每个浮点算术运算,包括除以零,都有一个明确定义的结果。该标准支持有符号零,以及 无穷大NaN(不是数字)。有两个零:+0(正零)和 -0(负零),这消除了除法时的任何歧义


规则:

在 IEEE 754 算术中,当为a ÷ +0时为正无穷大,当为负时a无穷大当为NaNaa = ±0.


资源

于 2018-08-11T15:30:36.897 回答