具体来说:
我正在做一些数学运算,并且应用程序不断崩溃,因为广泛使用的双精度恰好获得了值:-1.#IND000000000000 当“某些”数字被平方时......这是什么?不定?无限的?太大放不下?不是一个完美的平方根?有没有办法解决这个问题?提前致谢!编辑:如何检查双精度值是否具有此值?我试过: if (x == 0x-1.#IND000000000000) 和其他变体但没有奏效。是否可以检查变量是否具有此值?
实际上,字符串-1.#IND000000000000
不是一个值,由函数返回,但它是 a 的常见表示之一QNaN
,Quiet Not-a-Number
表示无效数字的特殊 IEEE-754 值,不会导致异常(还有SNaN
, Signalling NaN
,如果启用,这将导致浮点异常)。造成这种情况的常见原因是调用具有域外参数的函数。
NaN(例如您拥有的“不确定”和“无穷大”)可以通过检查来检测x == x
(NaN 为假,任何有限数为真)。
该值#IND000000000000
表示无效的数值。这通常称为 QNaN(Quiet Not-A-Number)值,因为它表示不确定类型但不会导致计算失败。
有可能,您试图确定其平方根的难以捉摸的数字是负数,没有定义该值。有关更多信息,请参阅维基百科。
解决它首先需要您确定问题发生在哪里。这意味着您要么需要使用调试器逐步完成它并观察变量的值,要么发布您的代码以便我们可以做同样的事情。
如果参数为负,则发生域错误,将全局变量 errno 设置为值 EDOM。
在不使用复杂类型的情况下,任何低于 0 的值的 sqrt 都会导致异常。
这是一个 NaN(不是数字)。这意味着您使用否定参数调用了 sqrt。
干杯&hth.,