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で割ったら例外が発生するものと思い書いていたコードに、これにまつわるバグが入り込んでた。こんな基本的なことではまるなんて。。。