Groovy って NaN の比較が Java と違う…

ネタ元:
なんぞこれ。NaNってなんなんすか?あのね、非数のことだよ。なんだかナンのカレーが食べたくなるね。ヒ素じゃなくてよかった。
びっくりした事


普段、double.NaN を意識するようなプログラムを書いていないので新鮮でした。そこで、早速 Groovy でも試してみました。

とりあえず Java でも

public class Test {
  public static void main(String[] args) {
    double d1 = 0.0 / 0;
    double d2 = d1;
    check(d1, d2); // "NG"
  }
  private static void check(double d1, double d2) {
    if (d1 == d2) System.out.println("OK");
    else System.out.println("NG");
  }
}

Groovy

double d1 = 0.0d / 0
double d2 = d1
println d1 // NaN
if (d1 == d2) println "OK"
else println "NG"
// OK が出力された…

Java では、NG になりましたが、Groovy では何故か OK に…。Groovy のバージョンは 1.6.3 です。
あと Groovy でハマりそうになったのが、0.0d の "d" を書くの忘れて、ゼロ除算例外が発生したこと。Groovy だと、接尾語付けないと BigDecimal になっちゃうんだった。


追記 調べたら、こんなページ見つけた。1.7系で修正されてるのかな?[#GROOVY-3309] comparisons with NaN should always return false - jira.codehaus.org