Javaで0.0を0で割っても例外は発生しない

intの0をintの0で割るとArithmeticException例外が投げられる。だけど、片方の0がdouble型、もう片方の0がint型の場合、int型の方がdouble型にキャストされて演算されるのでArithmeticExceptionは発生せず、結果としてNaNとなる。

class Test {
    public static void main(String[] args) {
	System.out.println(0.0 / 0);        // -> NaN
	System.out.println(0.0 / 0.0);      // -> NaN
	System.out.println(0 / 0.0);        // -> NaN
	System.out.println((double)0 / 0);  // -> NaN
	// System.out.println(0 / 0);          -> ArithmeticException
    }
}

とにかく0を0で割ったら例外が発生するものと思い書いていたコードに、これにまつわるバグが入り込んでた。こんな基本的なことではまるなんて。。。