数学“pow”函数返回-1。#IND。什么样的错误值是-1。#IND以及如何在if语句中检测错误?
答案 0 :(得分:8)
-1.#IND
是Windows上NaN的文字表示。
您可以使用以下小函数检查浮点值是否为NaN:
// NaN never compares equal, not even to itself
bool is_nan(double d){ return d != d; }
(正如@chris所说,如果你有一个符合C ++ 11标准的stdlib,你会在<cmath>
中获得std::isnan
。)
在正常的程序流程中,只要您仔细检查数学输入,就不必担心NaN。当然,您也可以采用其他方式进行数学计算,然后检查NaN。 :)
答案 1 :(得分:4)
您看到的值是 NaN 或不是数字的表示形式。这些值显示为具有未定义值的浮点运算的结果。例如,0.0 / 0.0
将产生NaN。还有许多其他情况会产生NaN。如果要确定浮点值是否为NaN,可以测试它们:
if (std::isnan(value)) {
...
}
由于浮点运算可以产生其他一些其他特殊值,例如正或负无穷大,并且<cmath>
中也存在这些值。
答案 2 :(得分:0)
-1#IND通常发生在代码中某处有/ 0的情况下。通过使用-ve exponents检查0的幂函数中的所有分母或基数来防止它。
分割或电源操作完成后,如果您没有检查输入,请检查输出:
if (output != output) return 0; // or some default
else return output;
答案 3 :(得分:0)
-1.#IND
是NaN,不是数字。 NaNs出现的原因很多。诸如0.0 / 0.0之类的表达是不确定的;如果你试试,你会得到一个NaN。 -1的平方根(或任何负实数)是纯虚数;使用float或double sqrt
函数,结果会得到一个NaN。这里的结果并不是不确定的,但它也不是真实的。这是一个NaN。
表达sqrt(-1.0)
的另一种方式是pow(-1.0, 0.5)
。这也会产生NaN。