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