Вы можете получить подписанный NaN, так как значение NaN-значения и знак значения контролируются различными битами в IEEE754 (NaN просто указывается специальными значениями экспоненты, отличными от знаканемного).Я в растерянности относительно того, какая операция сделала бы это все же.
возможно , что одна из нормальных операций, производящих NaN, может вызывать отрицательное отклонение (например, +0/-0
или +Inf/-Inf
).Но я бы подумал, что NaN будут печататься как nan
независимо от знака.
Однако, хотя стандарт очень подробно описывает, как обрабатываются числа, странно ничего не говорится о том, как они печатаются.На странице Википедии для NaN перечислены:
nan NaN NaN% NAN NaNQ
NaNS qNaN sNaN 1.#SNAN 1.#QNAN
-1.#IND -NaN NaN12345 -sNaN12300
с некоторыми из них, показывающими знак и дополнительную полезную нагрузку.
Обратите внимание, что я говорю о стандартах IEEEВот.Стандарты ISO C указывают на ограниченное количество форм, но то, будет ли напечатан знак и / или полезная нагрузка, зависит от реализации.Я могу только предположить, что более поздние версии библиотеки изменили свое поведение.
Как это исправить в компиляторе, я не уверен.Я бы просто выбрал прагматичный подход и проверил ваш выходной файл через что-то вроде sed 's/-nan/nan/g'
.Надеюсь, это не вызовет других проблем.
И вам также следует следить за формой, которая позволяет печатать полезную нагрузку, хотя я буду беспокоиться об этом, только когда тесты снова начнут давать сбой.Но я бы поместил комментарий где-то рядом с этой командой sed
, указывающий, что это может произойти в будущем.Таким образом, по крайней мере, парень, который следует за вами, поймет, почему.