5.2.4.2.2 / 3:
типы плавающих могут содержать
другие виды чисел с плавающей точкой,
такие как ... бесконечность и NaNs. NaN - это кодировка
означающий не число. Тихий NaN распространяется через почти
каждая арифметическая операция без
поднятие исключения с плавающей точкой;
сигнализация NaN обычно вызывает
exception исключение плавающей точки при возникновении
как арифметический операнд.
7.12 / 5 (математ. Ч):
Макрос NAN
определяется тогда и только тогда, когда
реализация поддерживает тихие NaNs
для типа поплавка. Расширяется до
константное выражение типа float
представляющий тихий NaN.
Таким образом, вы можете получить значение , если ваша реализация вообще поддерживает NaN, и , если , некоторые или все эти NaN тихие. В противном случае вы попадаете на территорию, определяемую реализацией.
Существует также небольшое беспокойство по поводу некоторых из этих макросов с плавающей запятой, что интерфейс компилятора может не знать , поддерживает ли он эту функцию или нет, потому что он генерирует код, который может работать на нескольких версиях архитектура, где поддержка варьируется. Я не знаю, относится ли это к этому макросу, но это другая ситуация, когда вы находитесь на определенной для реализации территории - препроцессор может консервативно заявить, что он не поддерживает эту функцию, когда фактически реализация в целом, как вы, ' снова его использую.