在Java语言中,(Number/0)抛出一个ArithmeticException,而(Number/0.0) =无穷大。这一切为什么要发生?
发布于 2010-01-27 21:01:24
因为IEEE-754浮点数有无穷大的表示,而整数没有。
换句话说,int中的每个位模式代表一个正常的整数;浮点值要复杂得多,有+/-无穷大、“非数字”(NaN)值、规格化值、次正常值等。
发布于 2010-01-27 21:18:01
From here
几乎所有现代处理器都支持IEEE浮点标准,该标准规定每个浮点算术运算,包括除以零,都具有明确定义的结果。该标准支持带符号的零,以及无穷大和NaN (不是数字)。有两个零,+0 (正零)和−0 (负零),这消除了除法时的任何歧义。在IEEE754算术中,当a为正时,a÷+0为正无穷大,当a为负时为负无穷大,当a=±0时为NaN。取而代之的是,当除以−0时,无穷大符号会发生变化。
整数除以零的处理方式通常与浮点数不同,因为结果没有整数表示法。一些处理器在尝试将整数除以零时会产生异常,尽管其他处理器会简单地继续并为除法生成错误的结果。结果取决于除法是如何实现的,可以是零,有时也可以是最大的整数。
发布于 2010-01-27 21:13:17
此外,您还可以查看JLS,它显示:
15.17.2除法运算符
另一方面,如果整数除法中除数的值为0,则抛出ArithmeticException。
浮点除法的结果由IEEE算法规范决定:如果结果不是NaN,则如果两个操作数具有相同的符号,则结果的符号为正,如果两个操作数具有不同的符号,则结果的符号为负。
非零有限值除以零会得到有符号无穷大。符号是由上述规则决定的。
https://stackoverflow.com/questions/2146944
复制相似问题