6

具体来说:

我正在做一些数学运算,并且应用程序不断崩溃,因为广泛使用的双精度恰好获得了值:-1.#IND000000000000 当“某些”数字被平方时......这是什么?不定?无限的?太大放不下?不是一个完美的平方根?有没有办法解决这个问题?提前致谢!编辑:如何检查双精度值是否具有此值?我试过: if (x == 0x-1.#IND000000000000) 和其他变体但没有奏效。是否可以检查变量是否具有此值?

4

6 回答 6

10

实际上,字符串-1.#IND000000000000不是一个值,由函数返回,但它是 a 的常见表示之一QNaNQuiet Not-a-Number表示无效数字的特殊 IEEE-754 值,不会导致异常(还有SNaN, Signalling NaN,如果启用,这将导致浮点异常)。造成这种情况的常见原因是调用具有域外参数的函数。

于 2011-01-14T06:31:00.933 回答
5

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

于 2011-01-16T01:14:46.270 回答
2

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

有可能,您试图确定其平方根的难以捉摸的数字是负数,没有定义该值。有关更多信息,请参阅维基百科

解决它首先需要您确定问题发生在哪里。这意味着您要么需要使用调试器逐步完成它并观察变量的值,要么发布您的代码以便我们可以做同样的事情。

于 2011-01-14T06:30:57.790 回答
1

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

于 2011-01-14T06:25:25.887 回答
0

在不使用复杂类型的情况下,任何低于 0 的值的 sqrt 都会导致异常。

于 2011-01-14T06:17:53.390 回答
0

这是一个 NaN(不是数字)。这意味着您使用否定参数调用了 sqrt。

干杯&hth.,

于 2011-01-14T06:31:07.033 回答