Я работаю в среде с практически отсутствующей библиотекой double / Math (NETMF). Я написал этот класс, чтобы сделать вещи проще:
public struct DoubleEx
{
public const double NaN = 0.0d / 0.0d;
public static bool IsNaN(double x)
{
return x != x;
}
...
}
Похоже, это должно работать, верно?
Хорошо, когда я запускаю этот код:
Debug.Print("Method call: " + DoubleEx.IsNaN(DoubleEx.NaN));
Debug.Print("Method call: " + DoubleEx.NaN != DoubleEx.NaN);
Я получаю этот вывод:
False
True
Каким-то образом введение его в функцию нарушает его! Здесь происходит какая-то оптимизация? Или аппаратное обеспечение неверно истолковывает инструкции?