8

Sun jdk の実装は次のようになります。

return v != v;

誰がそれがどのように機能するか説明できますか?

4

2 に答える 2

13

NaN値は何にも等しくありません(等式の片側がNaNの場合、等式はfalseです)。したがって、NaN!=NaNです。明らかに、すべての通常のダブルはそれ自体に等しい

于 2010-04-20T22:01:46.200 に答える
4

nan は、それ自体と等しくない唯一の double です。したがって、v!=v をチェックすると、NaN に対してのみ True が生成されます。

Java 仕様の内容は次のとおりです。

浮動小数点演算子は例外を生成しません (§11)。オーバーフローする演算は符号付き無限大を生成し、アンダーフローする演算は非正規化値または符号付きゼロを生成し、数学的に明確な結果を持たない演算は NaN を生成します。オペランドとして NaN を使用するすべての数値演算は、結果として NaN を生成します。既に説明したように、NaN は順序付けされていないため、1 つまたは 2 つの NaN を含む数値比較演算は false を返し、NaN を含む != 比較は true を返します (x が NaN の場合の x!=x を含む)。

于 2010-04-20T22:08:18.080 に答える