Вопрос

В последнее время, иногда (редко), когда мы экспортируем данные из нашего приложения, журнал экспорта содержит значения с плавающей точкой, которые выглядят как " -1. # J " ;. Я не смог воспроизвести его, поэтому я не знаю, как выглядит поплавок в двоичном формате или как Visual Studio отображает его.

Я попытался просмотреть исходный код для printf, но ничего не нашел (хотя не уверен на 100%, что посмотрел правильную версию ...).

Я пробовал поискать в Google, но, похоже, Google выбрасывает любые #. И я не могу найти списки ошибок с плавающей точкой.

Это было полезно?

Решение

Это может быть либо отрицательная бесконечность, либо NaN (не число). Благодаря форматированию в поле printf не делает различий между ними.

Я попробовал следующий код в Visual Studio 2008:

double a = 0.0;
printf("%.3g\n", 1.0 / a);  // +inf
printf("%.3g\n", -1.0 / a); // -inf
printf("%.3g\n", a / a);    //  NaN

, что приводит к следующему выводу:

1.#J
-1.#J
-1.#J

удаление спецификатора форматирования .3 дает:

1.#INF
-1.#INF
-1.#IND

так что ясно, что 0/0 дает NaN, а -1/0 дает отрицательную бесконечность (NaN, -inf и + inf - единственное &; ошибочное &; числа с плавающей запятой, если я правильно помню)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top