当两个值都是双精度时,为什么没有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。
需要注意的是相同的 “神奇” 适用于float
,double
,Float
和Double
。
回答:
因为在数字系统中未定义的东西不能明确表示。 “未定义”不是数字(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