当前位置: 首页 > 知识库问答 >
问题:

当两个值都是双倍时,为什么没有AlithmeticException(divide by zero)?[副本]

武晨
2023-03-14

double.java的源代码和一些常量类似

/**
 * 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;

但我想知道为什么它不抛出AlithmeticException(divide by zero)?

我已经试过了

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

它没有抛出异常...

double有什么魔力,为什么它不抛出异常?

共有1个答案

单于经纬
2023-03-14

“神奇”之处在于Java浮点表示是基于IEE754浮点标准的。它有一个特殊的值(NaN),它表示零除以零时得到的“不定值”。(还有表示正无穷大和负无穷大的值;例如1.0/0.0给出INF-正无穷大。)

Java语言规范中包含了这一点;参见第§4.2.3节,其中讨论了表示法;第§4.2.4节,其中讨论了算术是如何工作的。

注意,同样的“魔力”适用于floatdoublefloatdouble

 类似资料:
  • swift中取整1.005的问题 1.005四舍五入到小数点后两位,结果是1.0,而不是1.01,如何求解? 输出:

  • 问题内容: 我知道Java具有双精度陷阱,但是为什么有时逼近结果还可以,但有时却不然。 像这样的代码: 结果是这样的: 问题答案: 如您所述,并非所有数字都可以在IEEE754中准确表示。结合Java用于打印这些数字的规则,这会影响您所看到的内容。 对于背景,我将简要介绍IEEE754的不准确性。在这种情况下,由于无法准确表示,因此您经常会发现实际使用的数字是。 请参阅此处以分析其原因。您获得“不

  • 问题内容: 基本上我想知道为什么它什么都不输出: 您可以假设它应该产生输出,我已经运行另一行来确认 看来您不能多次通过管道传递tail的输出!有人知道这笔交易是什么,有解决方案吗? 编辑:到目前为止,要回答问题,该文件肯定具有应由grep显示的内容。作为grep是否这样做的证据: 输出正确显示,但是如果使用它代替: 没有输出显示。 如果真的有帮助,我正在运行ubuntu 10.04 问题答案: 在

  • 我试图理解object.clone()在Java中是如何工作的。我偶然发现了以下事实: null 疑点: 为什么Java设计者会做出这样的设计选择并这样实现它?为什么不在本身中定义,如果实现类不为提供实现,那么将产生编译时错误。 Q2.为什么要在运行时检查实例是否实现? 附:我知道在一个问题中问多个问题是一个坏主意。但这些都是密切相关的问题。我可以问一个问题,比如“为什么不包含?”但是,我觉得,为

  • 当我转到<代码>/银行/1我看到了预期的账户信息。很好,很好。 当我转到<代码>/银行/1/description我看到了描述(好),但我也看到了帐户信息(不好)。 我习惯了Spring的,如果多个路径匹配,事情就会中断——但即便如此,AFAIK,在我的代码中,无论如何只有一个应该匹配? 银行。Java语言 帐户ction.java 日志输出: