什么样的C ++常量/宏是-1。#IND?

时间:2012-10-05 19:40:32

标签: c++ function math pow

数学“pow”函数返回-1。#IND。什么样的错误值是-1。#IND以及如何在if语句中检测错误?

4 个答案:

答案 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。