核心Java除以0.0



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

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

对于CCD_ 1变量也发生同样的情况。而对于int类型,它的提升CCD_。为什么?

注意:我使用的是jdk 1.7

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

来自JLS

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

将非零有限值除以零,得到带符号的无穷符号由上述规则决定。

查看IEEE解释

为什么除以零(或上溢或下溢)不停止编程或触发错误?为什么数字标准包括"不是数字"(NaN)754型号鼓励采用稳健的程序。是的不仅适用于数字分析师,也适用于电子表格用户、数据库系统,甚至咖啡壶。传播规则因为NaN和无穷大允许无关紧要的例外消失。类似地,渐变下溢在精度范围。

当特殊情况需要注意时,可以对其进行检查立即通过陷阱或在方便的时候通过状态标志。陷阱可以用来停止程序,但不可恢复的情况是极其罕见。对于嵌入式系统或网络代理。更常见的情况是,陷阱日志诊断信息或替代有效结果。

标志提供可预测的控制流量和速度。它们的用途要求程序员知道异常情况,但是标志粘性允许程序员延迟处理异常情况直到必要时。

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

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

最新更新