double.NaN and float.NaN are not equal to anything, not even themselves.
When anything is compared with NaN using one of the comparison operators >,
>=, <, ⇐ or the equality operator
==, the result will always be false. In contrast, when anything is compared with NaN using the inequality operator
!=, the result will always be true.
Instead, the best way to see whether a variable is equal to NaN is to use the float.IsNaN and double.IsNaN methods, which work as expected.
var a = double.NaN;
if (a == double.NaN) // Noncompliant: always false
{
Console.WriteLine("a is not a number");
}
if (a != double.NaN) // Noncompliant: always true
{
Console.WriteLine("a is not NaN");
}
var a = double.NaN;
if (double.IsNaN(a))
{
Console.WriteLine("a is not a number");
}
if (!double.IsNaN(a))
{
Console.WriteLine("a is not NaN");
}