Powód Double.NaN != Double.NaNjest prosty:
Czy spodziewasz 0/0się być tym samym, co Math.Sqrt(-3)? I tak samo jak Math.Sqrt(-7)?
Moim zdaniem w C # jest błąd, który Equals()nie jest zastępowany dla NaN.
Assert.IsTrue(Double.NaN != Double.NaN);
Assert.IsTrue(Double.NaN.Equals(Double.NaN));
W tym samym czasie
Assert.IsTrue(Double.PositiveInfinity == Double.NegativeInfinity);
Assert.IsTrue(Double.PositiveInfinity.Equals(Double.PositiveInfinity));
Użyj funkcji statycznych dla Doublei Single, np
Double.IsNaN(value) && Double.IsInfinity(value);
Lub bardziej szczegółowe:
Double.IsPositiveInfinity(value);
Double.IsNegativeInfinity(value);