为什么整数除以零 1/0 会给出错误,而浮点 1/0.0 会返回 “Inf”?

2022-09-01 09:48:21

我只是对此感到好奇:

在 Java 中进行评估时,会发生以下异常:1/0

线程“main” java.lang.ArithmeticException中的异常:/ by zero at Foo.main(Foo.java:3)

但被评估为 。1/0.0Infinity

public class Foo {
    public static void main (String[] args) {
        System.out.println(1/0.0);
    }
}

为什么会发生这种情况?


答案 1

这是因为整数没有 +/-Inf、NaN 的值,并且不允许除以 0,而浮点数确实具有这些特殊值。


答案 2

1/0 是两个 ints 的除法,并引发异常,因为不能除以整数零。但是,0.0 是 double 类型的文字,Java 将使用浮点除法。IEEE浮点规范具有除以零的特殊值(其中包括),其中之一是双精度值。无限。

如果您对细节感兴趣,浮点规范(通常很神秘)在维基百科上有一个页面:http://en.wikipedia.org/wiki/IEEE_754-2008,其全文也可以在线阅读:http://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=4610933


推荐