« java.util.HashMap | Main | Java6でClass.forName(String) »

2007.03.15

非数(NaN)

 たまたま、処理の都合上0.0d/0が紛れ込み、それをチェックする処理を記述する必要があったのですが・・・

double hoge = 0.0d;
double fuga = hoge / 0;
System.out.println(fuga == Double.NaN);
なんて処理を記述した場合、得られる結果は期待に反して"false"だったりします。

 んで、DoubleにはisNaN(double)ってメソッドがあるのですが、それのソースを見てみたところ、

return (引数 != 引数);

ってなってました。もちろん、上記の例だとSystem.out.println(Double.isNaN(fuga));の結果はtrueとなります。ほ~って感じです(^^;

 しかし、内部的にはどういう風に値を保持しているんでしょうね?? JavaDocによると、Double.NaNは

Double.longBitsToDouble(0x7ff8000000000000L) によって返される値と同じです。

ってことだそうですが、このメソッドって、nativeなんですよね。

|

« java.util.HashMap | Main | Java6でClass.forName(String) »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/14272083

Listed below are links to weblogs that reference 非数(NaN):

« java.util.HashMap | Main | Java6でClass.forName(String) »