Причина Double.NaN != Double.NaNпроста:
Ви очікуєте 0/0бути таким самим, як Math.Sqrt(-3)? І те саме, що Math.Sqrt(-7)?
На мій погляд, є помилка в C #, Equals()яка не перевизначена для NaN.
Assert.IsTrue(Double.NaN != Double.NaN);
Assert.IsTrue(Double.NaN.Equals(Double.NaN));
В той самий час
Assert.IsTrue(Double.PositiveInfinity == Double.NegativeInfinity);
Assert.IsTrue(Double.PositiveInfinity.Equals(Double.PositiveInfinity));
Використовуйте статичні функції для Doubleі Single, наприклад
Double.IsNaN(value) && Double.IsInfinity(value);
Або більш конкретно:
Double.IsPositiveInfinity(value);
Double.IsNegativeInfinity(value);