java 除法运算中 Nan 和 Infinity 的决定因素
What decides Nan and Infinity in java division operations
下面代码的输出让我很困惑。为什么有时 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
这里的决定因素是什么?
这是因为 IEEE 浮点运算标准 (IEEE 754),这是电气和电子学会于 1985 年制定的浮点计算技术标准电子工程师 (IEEE)。
目的:
The IEEE floating-point standard,.. specifies that every floating
point arithmetic operation, including division by zero, has a
well-defined result. The standard supports signed zero, as well as
infinity and NaN (not a number). There are two zeroes: +0 (positive zero) and −0 (negative zero) and this removes any
ambiguity when dividing.
规则:
In IEEE 754 arithmetic, a ÷ +0
is positive infinity when a
is
positive, negative infinity when a
is negative, and NaN when a = ±0.
下面代码的输出让我很困惑。为什么有时 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
这里的决定因素是什么?
这是因为 IEEE 浮点运算标准 (IEEE 754),这是电气和电子学会于 1985 年制定的浮点计算技术标准电子工程师 (IEEE)。
目的:
The IEEE floating-point standard,.. specifies that every floating point arithmetic operation, including division by zero, has a well-defined result. The standard supports signed zero, as well as infinity and NaN (not a number). There are two zeroes: +0 (positive zero) and −0 (negative zero) and this removes any ambiguity when dividing.
规则:
In IEEE 754 arithmetic,
a ÷ +0
is positive infinity whena
is positive, negative infinity whena
is negative, and NaN whena = ±0.