C ++ sqrt返回-1。#IND000000000000

时间:2011-01-14 06:12:55

标签: c++ sqrt

具体来说:

我正在做一些数学运算,并且应用程序不断崩溃,因为广泛使用的double恰好得到了值:-1。当“某些”数字是sqrt'ed时的#IND000000000000 ... 这是什么?不定?无穷?太大了吗?不是一个完美的平方根?有什么方法可以解决这个问题吗? 提前致谢! 编辑:我怎样才能检查双倍是否有这个值?我试过:if(x == 0x-1。#IND000000000000)和其他变种但是没有用。是否可以检查变量是否具有此值?

6 个答案:

答案 0 :(得分:10)

实际上,字符串-1.#IND000000000000不是函数返回的值,但它是QNaNQuiet Not-a-Number的常见表示形式之一,即特殊的IEEE-754值表示无效数字,不会导致异常(还有SNaNSignalling NaN,这会导致浮点异常(如果已启用)。这种情况的常见原因是调用带有参数的函数。

答案 1 :(得分:5)

通过检查x == x可以检测到NaN(例如“不确定”和“无穷大”)(NaN为假,任何有限数均为真)。

答案 2 :(得分:2)

#IND000000000000表示无效的数值。这通常称为QNaN(Quiet Not-A-Number)值,因为它表示不确定的类型,但不会导致计算失败。

很有可能,您尝试确定的平方根的难以捉摸的数字是数字,其值未定义。有关详细信息,请参阅Wikipedia

解决它首先需要您确定发生问题的位置。这意味着您需要使用调试器逐步完成它并观察变量的值,或者发布代码以便我们也可以这样做。

答案 3 :(得分:1)

如果参数为负数,则会发生域错误,将全局变量errno设置为值EDOM。

答案 4 :(得分:0)

如果不使用复杂类型,任何低于0的值的sqrt都会导致异常。

答案 5 :(得分:0)

这是一个NaN(非数字)。这意味着你已经使用否定参数调用了sqrt。

干杯&第h。,