function — Какой тип константы / макроса C ++ равен -1. # IND?

Функция Math «pow» возвращает -1. # IND. Какое значение ошибки — -1. # IND и как я могу обнаружить ошибку в операторе if?

1

Решение

-1.#IND это текстовое представление NaN на винде.

Вы можете проверить, является ли значение с плавающей точкой NaN с помощью этой небольшой функции:

// NaN never compares equal, not even to itself
bool is_nan(double d){ return d != d; }

(Как отмечает @chris, если у вас есть совместимый с C ++ 11 stdlib, вы получите std::isnan в <cmath>.)

При нормальном выполнении программы вам не нужно беспокоиться о NaN, пока вы проверяете правильность математических входов. Конечно, вы также можете пойти другим путем и просто выполнить свои математические расчеты и впоследствии проверить на NaN. 🙂

8

Другие решения

Значение, которое вы видите, является представлением для NaN или же не число. Эти значения отображаются в результате операции с плавающей запятой, которая имеет неопределенное значение. Например, 0.0 / 0.0 даст NaN. Существует ряд других ситуаций, в которых образуется NaN. Если вы хотите определить, является ли значение с плавающей точкой NaN, вы можете проверить их:

if (std::isnan(value)) {
...
}

Есть несколько других специальных значений, которые могут быть получены в результате операций с плавающей запятой, например, положительная или отрицательная бесконечность, и есть тесты в <cmath> и для них.

4

-1 # IND обычно происходит, когда в вашем коде есть / 0. Защитите его, проверив все знаменатели или основания в функциях pow с показателями -ve на 0.

После завершения операции деления или вычисления, если вы не проверяли свои входные данные, проверьте свои выходные данные с помощью:

if (output != output)  return 0; // or some default
else                   return output;
0

-1.#IND это NaN, а не число. NaN возникают по многим причинам. Такие выражения, как 0,0 / 0,0, являются неопределенными; ты получишь NaN, если попробуешь. Квадратный корень из -1 (или любого отрицательного действительного числа) является чисто мнимым; использовать поплавок или двойной sqrt функция, и вы получите NaN в результате. Здесь результат не является неопределенным, но и не реальным. Это NaN.

Еще один способ выразить sqrt(-1.0) является pow(-1.0, 0.5), Это также генерирует NaN.

0
По вопросам рекламы [email protected]