У меня есть некоторый (устаревший вложенный c) код, который создает CSV файл с помощью некоторых вызовов sprintf
. Иногда я вижу значения 1.#QO
. Я попытался воспроизвести эти значения с условиями, которые должны дать отрицательную бесконечность, положительную бесконечность и NaN, но ни один из них не дает мне магического результата 1.#QO
. Итак, что же это такое?
... и да, я знаю, что, очевидно, что-то не так в математике, которая производит эту ценность, но понимание того, что это означает, поможет в отладке.
[Изменить 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
?