Что делает ошибку с плавающей точкой-1.#J средний?

Вы можете сделать это, используя хитрость.

  • Отображение прозрачного вида над корневым видом для отключения щелчка.
  • Скрыть этот вид для включения кликов

Спасибо

12
задан Srekel 8 May 2009 в 14:32
поделиться

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

28
ответ дан 2 December 2019 в 05:28
поделиться