java.lang.ArithmeticException: / by zero
次のステートメントは、明らかなようにスローします。
System.out.println(0/0);
リテラル0
はリテラルと見なされint
、ゼロ除算は整数演算では許可されないためです。
ただし、次のケースでは、のような例外はスローされませんjava.lang.ArithmeticException: / by zero
。
int a = 0;
double b = 6.199;
System.out.println((b/a));
と表示されますInfinity
。
次のステートメントはNaN
、例外なく (Not a Number) を生成します。
System.out.println(0D/0); //or 0.0/0, or 0.0/0.0 or 0/0.0 - floating point arithmetic.
この場合、両方のオペランドが double と見なされます。
同様に、次のステートメントは例外をスローしません。
double div1 = 0D/0; //or 0D/0D
double div2 = 0/0D; //or 0D/0D
System.out.printf("div1 = %s : div2 = %s%n", div1, div2);
System.out.printf("div1 == div2 : %b%n", div1 == div2);
System.out.printf("div1 == div1 : %b%n", div1 == div1);
System.out.printf("div2 == div2 : %b%n", div2 == div2);
System.out.printf("Double.NaN == Double.NaN : %b%n", Double.NaN == Double.NaN);
System.out.printf("Float.NaN == Float.NaN : %b%n", Float.NaN == Float.NaN);
次の出力が生成されます。
div1 = NaN : div2 = NaN
div1 == div2 : false
div1 == div1 : false
div2 == div2 : false
Double.NaN == Double.NaN : false
Float.NaN == Float.NaN : false
これらはすべてfalse.
、浮動小数点数または倍精度数でこの演算 (ゼロによる除算) が許可されているのはなぜですか?
ちなみに、浮動小数点数(倍精度数)には、数値( )ではなく、正の無限大、 負の無限大を表す値があることがわかります...NaN