2

重複の可能性:
0.0で除算したときにJavaが例外をスローしないのはなぜですか?

Javaの次のステートメントがArithmeticExceptionを報告しないのはなぜですか?

double d = 1.0/0;
4

1 に答える 1

8

つまり、浮動小数点数は無限大(または数値ではない値を生成する演算)を表すことができるため、これをもたらす演算(たとえば、0で除算)は有効です。

Mohammod Hossainの回答、およびこの質問とその受け入れられた回答を拡張すると、「例外的な算術条件が発生したときにスローされます」というArithmeticExceptionがスローされます。整数の場合、0で除算するのがこのような場合ですが、浮動小数点数(floatsおよびdoubles)の場合、正と負の表現が存在します。

例として、

public class DivZeroFun {

    public static void main(String args[]) {

        double f = 5.0;
        System.out.println(f / 0);
        double f2 = -5.0;
        System.out.println(f2/0);
    }
}

このコードは、「Infinity」を出力し、次に「-Infinity」を応答として出力します。これは、「Infinity」が実際にはJavaでエンコードされたfloatsおよびsの受け入れられる値であるためです。double

また、このフォーラムの投稿から:

浮動小数点表現には通常、+ inf、-inf、さらには「NotaNumber」が含まれます。整数表現はそうではありません。表示されている動作はJavaに固有のものではありません。ほとんどのプログラミング言語は、浮動小数点ハードウェア(または低レベルライブラリ)が実行していることであるため、同様のことを実行します。

そして再びフォーラムの投稿から:

使用される浮動小数点数のIEEE標準では、正と負の無限大の値が定義されており、特別な「数値ではない」場合があります。詳細については、java.lang.Floatおよびjava.lang.Doubleの定数を参照してください。

于 2012-07-25T05:48:43.883 に答える