核心Java上除以0.0

时间:2015-03-31 13:59:14

标签: java string arithmeticexception

我在java中听到了一个转折点。如果有人知道你被要求分享的正当理由。 问题是:

double result1 = 1.0/0.0;
sop(result1); // output Infinity
double result2 = 0.0/0.0;
sop(result2); // output NaN

float变量也是如此。但是对于int类型它的引发ArithmeticException。为什么呢?

注意:我使用的是jdk 1.7

2 个答案:

答案 0 :(得分:3)

您不能使用int表示无穷大或NAN。

来自JLS

  

浮点除法的结果由规则确定   IEEE 754算术:

     

将零非零有限值除以零会导致签名   无穷。该标志由上述规则决定。

检查IEEE explanation

  

为什么不将零除(或溢出或下溢)停止   程序或触发错误?为什么数字标准包括   “不是一个数字”(NaN)? 754模型鼓励强大的计划。它是   不仅适用于数值分析师,也适用于电子表格   用户,数据库系统,甚至咖啡壶。传播规则   因为NaN和无穷大允许无关紧要的例外消失。   类似地,逐渐下溢维持错误属性   精度范围。

     

当需要注意特殊情况时,可以检查它们   立即通过陷阱或在方便的时候通过状态标志。陷阱   可用于停止程序,但不可恢复的情况   非常罕见。简单地停止一个程序不是一个选择   嵌入式系统或网络代理。更常见的是,陷阱记录诊断   信息或替代有效结果。

     

Flags提供可预测的控制流程和速度。他们的用途   要求程序员注意异常条件,但要标记   粘性允许程序员延迟处理异常情况   直到必要。

答案 1 :(得分:0)

无穷大或未定义的数字不是整数集的一部分,因此它们被排除在intInteger之外。在大多数编程语言中都是如此,而不是Java本身。

但真正的原因当然是历史性的。过去使用2补码二进制逻辑表示整数。标准中没有NaNInfinity