У меня есть некоторый (унаследованный встроенный 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 VisualStudio 2008.
[Редактировать 2] Немного больше копаний показывает 0xFFFFFFFF
дает -1.#QO
:
unsigned int i = 0xFFFFFFFF;
float* f = (float*)&i;
printf("%.3f", *f); // gives -1.#QO
.. и смотрит на это в VisualStudio отладчик расширяет его до -1.#QNAN00
, так что похоже, что это, вероятно, специфичное для Microsoft представление NaN
?