Базовое представление NaN содержит знаковый бит, и именно на это printf
смотрит, решая, должен ли он печатать минус или нет.
Причина, по которой стандарт гласит, что знаковый бит следует игнорировать, заключается в том, чтобы позволить таким вещам, как отрицать или абсолютный , просто изменить знаковый бит, без необходимости проверять, является ли входное значение было NaN.