29

なぜfloat.NaN != double.NaNですか?

whilefloat.PositiveInfinity == double.PositiveInfinityfloat.NegativeInfinity == double.NegativeInfinity等しい.

例:

bool PosInfinity = (float.PositiveInfinity == double.PositiveInfinity); //true
bool NegInfinity = (float.NegativeInfinity == double.NegativeInfinity); //true

bool isNanEqual = (float.NaN == double.NaN);  //false, WHY?
4

3 に答える 3

44

NaNと等しくなることはありませんNaN(同じ型内であっても)。したがって、IsNaN関数が存在する理由は次のとおりです。

Double zero = 0;
// This will return true.
if (Double.IsNaN(0 / zero)) 
{
    Console.WriteLine("Double.IsNan() can determine whether a value is not-a-number.");
}

また、あなたが示した比較はどれも実際には「そのまま」発生していないことに注意してください。を記述するfloatValue == doubleValueと、比較が行われる前に float は実際には暗黙的に double に変換されます。

于 2011-03-06T05:56:14.423 に答える
29

おそらくNaN != NaN

于 2011-03-06T05:53:13.447 に答える
10

ウィキペディアを引用するには:

NaN との比較は、それ自体との比較であっても、常に順不同の結果を返します。

于 2011-03-06T05:53:31.187 に答える