Функция Math «pow» возвращает -1. # IND. Какое значение ошибки — -1. # IND и как я могу обнаружить ошибку в операторе if?
-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. 🙂
Значение, которое вы видите, является представлением для NaN или же не число. Эти значения отображаются в результате операции с плавающей запятой, которая имеет неопределенное значение. Например, 0.0 / 0.0
даст NaN. Существует ряд других ситуаций, в которых образуется NaN. Если вы хотите определить, является ли значение с плавающей точкой NaN, вы можете проверить их:
if (std::isnan(value)) {
...
}
Есть несколько других специальных значений, которые могут быть получены в результате операций с плавающей запятой, например, положительная или отрицательная бесконечность, и есть тесты в <cmath>
и для них.
-1 # IND обычно происходит, когда в вашем коде есть / 0. Защитите его, проверив все знаменатели или основания в функциях pow с показателями -ve на 0.
После завершения операции деления или вычисления, если вы не проверяли свои входные данные, проверьте свои выходные данные с помощью:
if (output != output) return 0; // or some default
else return output;
-1.#IND
это NaN, а не число. NaN возникают по многим причинам. Такие выражения, как 0,0 / 0,0, являются неопределенными; ты получишь NaN, если попробуешь. Квадратный корень из -1 (или любого отрицательного действительного числа) является чисто мнимым; использовать поплавок или двойной sqrt
функция, и вы получите NaN в результате. Здесь результат не является неопределенным, но и не реальным. Это NaN.
Еще один способ выразить sqrt(-1.0)
является pow(-1.0, 0.5)
, Это также генерирует NaN.