Ответ 1
Да, используя тот факт, что a NaN
не равно никакому другому числу, включая его.
Это имеет смысл, если вы думаете о том, что означает NaN
, о том, что вы создали значение, которое на самом деле не в ваших силах для представления с "нормальными" значениями с плавающей запятой.
Итак, если вы создадите два числа, в которых вы не знаете, что это такое, вы вряд ли сможете считать их равными. Они могут быть, но, учитывая довольно большую возможность чисел, что это может быть (бесконечно на самом деле), вероятность того, что два одинакового числа, исчезающе мала: -)
Вы можете либо искать функцию (фактически макрос), например isnan
(в math.h
для C и cmath
для С++), либо просто использовать свойство, что значение NaN
не равно себе с чем-то как:
if (myFloat != myFloat) { ... }
Если для какой-то причудливой причины ваша реализация C не имеет isnan
(она должна, поскольку стандарт ее определяет), вы можете закодировать свой собственный, что-то вроде:
int isnan_float (float f) { return (f != f); }