ネタ元:
なんぞこれ。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