在java分区操作中决定Nan和Infinity的是什么

Vin*_*til 5 java exception division dividebyzeroexception

以下代码的输出让我感到困惑.为什么NaN有时和无限其他时间?

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);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

NaN
NaN
Infinity
Infinity
NaN
Exception in thread "main" java.lang.ArithmeticException: / by zero
Run Code Online (Sandbox Code Playgroud)

这里的决定因素是什么?

Yah*_*hya 5

这是因为IEEE标准浮点运算(IEEE 754),它是1985年由电气和电子工程师协会(IEEE)建立的浮点计算的技术标准.


目的:

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


规则:

在IEEE 754算术运算,a ÷ +0正无穷大a,负无穷大a,并且为NaNa = ±0.


资源