Обычные относительные операции (как less) будут выдавать ошибку, если одним
из операндов является NaN, что приводит к исключениям. Для избежания
подобноых ситуаций C99 определяет эти макросы. Они гарантированно вычиляют
свои операнды только один раз. Операндом может быть любой действительный
тип с плавающей точкой.
isgreater()
определяет справедливость (x) > (y) без ошибки, если x или y является NaN.
isgreaterequal()
определяет справедливость (x) >= (y) без ошибки, если x или y является NaN.
isless()
определяет справедливость (x) < (y) без ошибки, если x или y является NaN.
islessequal()
определяет справедливость (x) <= (y) без ошибки, если x или y является NaN.
islessgreater()
определяет справедливость (x) < (y) || (x) > (y) без ошибки, если x или y является NaN.
Этот макрос не эквивалентен x != y так как это выражение правдиво (true),
если x или y является NaN.
isunordered()
является истиной, если x или y является NaN и ложью в ином случае.
ЗАМЕЧАНИЯ
Не все оборудование поддерживает эти функции, и там где они не поддерживаются,
они будут эмулироваться макросами. Это приведет к небольшим задержкам в работе.
Не используйте эти функции, если значения NaN вас нисколько не тревожат.