我在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
答案 0 :(得分:3)
您不能使用int表示无穷大或NAN。
来自JLS
浮点除法的结果由规则确定 IEEE 754算术:
将零非零有限值除以零会导致签名 无穷。该标志由上述规则决定。
为什么不将零除(或溢出或下溢)停止 程序或触发错误?为什么数字标准包括 “不是一个数字”(NaN)? 754模型鼓励强大的计划。它是 不仅适用于数值分析师,也适用于电子表格 用户,数据库系统,甚至咖啡壶。传播规则 因为NaN和无穷大允许无关紧要的例外消失。 类似地,逐渐下溢维持错误属性 精度范围。
当需要注意特殊情况时,可以检查它们 立即通过陷阱或在方便的时候通过状态标志。陷阱 可用于停止程序,但不可恢复的情况 非常罕见。简单地停止一个程序不是一个选择 嵌入式系统或网络代理。更常见的是,陷阱记录诊断 信息或替代有效结果。
Flags提供可预测的控制流程和速度。他们的用途 要求程序员注意异常条件,但要标记 粘性允许程序员延迟处理异常情况 直到必要。
答案 1 :(得分:0)
无穷大或未定义的数字不是整数集的一部分,因此它们被排除在int
和Integer
之外。在大多数编程语言中都是如此,而不是Java
本身。
但真正的原因当然是历史性的。过去使用2补码二进制逻辑表示整数。标准中没有NaN
或Infinity
。