私はちょうどOCPJPの問題を勉強していたのですが、この奇妙なコードを見つけました:
public static void main(String a[]) {
System.out.println(Double.NaN==Double.NaN);
System.out.println(Double.NaN!=Double.NaN);
}
コードを実行すると、次の結果が得られました。
false
true
false
同じように見える 2 つのものを比較した場合の出力はどうなりますか? どういうNaN
意味ですか?
ベストアンサー1
NaN は「非数」を意味します。
オーバーフローする演算では符号付き無限大が生成され、アンダーフローする演算では非正規化値または符号付きゼロが生成され、数学的に明確な結果がない演算では NaN が生成されます。オペランドとして NaN を使用するすべての数値演算では、結果として NaN が生成されます。すでに説明したように、NaN は順序付けされていないため、1 つまたは 2 つの NaN を含む数値比較演算では が返され
false
、NaN を含むすべての!=
比較では がNaN の場合true
も含め が返されます。x!=x
x