Какое значение с плавающей запятой заставляет sprintf_s () создавать «1. # QO»?

У меня есть некоторый (устаревший встроенный c) код, который создает файл .csv с помощью некоторых вызовов sprintf . Иногда я вижу значения 1. # QO . Я пробовал воспроизвести эти значения с условиями, которые должны давать отрицательную бесконечность, положительная бесконечность и NaN, но ни один из них, похоже, не дает мне волшебного 1. # QO результата. Так что же дает такое значение?

... и да, я знаю, что явно что-то идет не так с математикой, которая дает это значение, но понимание того, что это означает, поможет в отладке.

[Edit 1] Фактическая строка, которая выполняет преобразование:

sprintf_s(txt, CSV_HEADER_SIZE, "%.3f", value);

, где:

#define CSV_HEADER_SIZE (100)
char txt[CSV_HEADER_SIZE];

Я компилирую с MS Visual Studio 2008.

[Edit 2] Еще немного покопания показывает 0xFFFFFFFF дает -1. # QO :

unsigned int i = 0xFFFFFFFF;
float* f = (float*)&i;
printf("%.3f", *f); // gives -1.#QO

.. и глядя на это в Visual Отладчик Studio расширяет его до -1. # QNAN00 , поэтому похоже, что это, вероятно, специфичное для Microsoft представление NaN ?

18
задан mskfisher 9 May 2012 в 16:31
поделиться