当两个值都是双精度时,为什么没有ArithmeticException(除以零)?

看源代码Double.java和一些常量像当两个值都是双精度时,为什么没有ArithmeticException(除以零)?

/** 

* Constant for the Not-a-Number (NaN) value of the {@code double} type.

*/

public static final double NaN = 0.0/0.0;

/**

* Constant for the positive infinity value of the {@code double} type.

*/

public static final double POSITIVE_INFINITY = 1.0/0.0;

/**

* Constant for the negative infinity value of the {@code double} type.

*/

public static final double NEGATIVE_INFINITY = -1.0/0.0;

但我不知道为什么它不(被零除)抛出ArithmeticException?

,我已经试过

public static final int VALUE = 0/0; 

现在它抛出异常,但是,当我说

public static final double VALUE = 0d/0d; 

它不是引发异常......

什么的Double,为什么它的魔力是不是抛出异常?

回答:

“神奇”的是,Java的浮点表示是基于IEE 754 floating point标准。这有一个特殊值(NaN),表示当零除以零时得到的“不确定值”。 (也有值表示正负无穷大;例如1.0/0.0给出INF-正无穷大。)

这包括在Java语言规范中;请参阅讨论表示的章节§4.2.3以及讨论算法如何工作的章节§4.2.4。


需要注意的是相同的 “神奇” 适用于floatdoubleFloatDouble

回答:

因为在数字系统中未定义的东西不能明确表示。 “未定义”不是数字(NaN),double/float有NaN来表明这一点。

IEEE 754

“算术格式:套二进制和十进制浮点数据,其由有限数量(包括符号的零和次正规数),无穷大和特殊的‘非数字’的值(NaN的) “

回答:

Java(以及一些但不是所有其他语言)中的双精度值支持NaN(非数字)值。

像一个除0的操作会给你一个双倍的NaN。

任何涉及NaN的操作都将导致NaN。

维基百科对楠主题一整页:

http://en.wikipedia.org/wiki/NaN

以上是 当两个值都是双精度时,为什么没有ArithmeticException(除以零)? 的全部内容, 来源链接: utcz.com/qa/265382.html

回到顶部