Ответ 1
Это может быть либо отрицательная бесконечность, либо 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 являются единственными "ошибочными" числами с плавающей запятой, если я правильно помню)