在Java中,(Number / 0)抛出ArithmeticException而(Number / 0.0)= Infinity。 为什么会这样?
答案 0 :(得分:13)
因为IEEE-754浮点数具有无穷大的表示,而整数则没有。
换句话说,int
中的每个位模式都代表一个正常整数;浮点值更复杂,+ / - 无穷大,“非数字”(NaN)值,标准化值,次正常值等。
答案 1 :(得分:3)
几乎所有现代处理器都支持的IEEE浮点标准规定每个浮点算术运算(包括除以零)都有明确定义的结果。该标准支持有符号零,以及无穷大和NaN(不是数字)。有两个零,+ 0(正零)和-0(负零),这消除了分割时的任何歧义。在IEEE 754算术中,当a为正时,÷+ 0为正无穷大,当a为负时,÷+ 0为负无穷大,当a =±0时,为NaN。除以-0时,无穷大符号会发生变化。
整数除零通常与浮点的处理方式不同,因为结果没有整数表示。当尝试将整数除以零时,某些处理器会生成异常,但其他处理器只会继续并为分区生成不正确的结果。结果取决于如何实现除法,并且可以为零,或者有时可能是最大的整数。
答案 2 :(得分:0)
您还可以查看说明的JLS:
15.17.2分部操作员浮点除法的结果由规范确定 IEEE算法: 如果结果不是NaN,则如果两个操作数都有,则结果的符号为正 同样的标志,如果操作数有不同的标志,则为负 将零非零有限值除以零会产生有符号无穷大。 该标志由上述规则决定。