【发布时间】:2015-09-26 06:10:50
【问题描述】:
double d=1.0/0.0;
输出是Infinity
double d=1/0;
输出是ArithmeticException。
这两者有什么区别? 这里的无穷大是什么意思?
【问题讨论】:
标签: java
double d=1.0/0.0;
输出是Infinity
double d=1/0;
输出是ArithmeticException。
这两者有什么区别? 这里的无穷大是什么意思?
【问题讨论】:
标签: java
第一种情况被视为 double 上的除法,后一种情况被视为 int 上的除法,因此会出现 ArthimeticException。
这就是无限的意思
http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#POSITIVE_INFINITY
双精度数和浮点数的划分符合IEEE 754 浮点匹配标准,不应引发异常。
【讨论】:
在数学上,除以零是不确定的,尽管可以粗略地认为它是无穷大。 (更严格一点,对于任何 x 值,它都是大于 x 的数字。)
IEEE754 浮点双精度(Java 使用)表示无穷大。那是 1.0 / 0.0 的结果。从这个意义上说,1.0 / 0.0 是可计算的,因为它发生在浮点运算中。
整数类型没有无穷大的表示,因此会引发异常。 1 / 0 以整数算法计算。
【讨论】:
浮点数有一种编码“无穷大”的方法。所以无穷大是双变量的有效值。整型变量没有这个选项。所以会抛出异常。
【讨论】: