具体来说:
我正在做一些数学运算,并且应用程序不断崩溃,因为广泛使用的double恰好得到了值:-1。当“某些”数字是sqrt'ed时的#IND000000000000 ... 这是什么?不定?无穷?太大了吗?不是一个完美的平方根?有什么方法可以解决这个问题吗? 提前致谢! 编辑:我怎样才能检查双倍是否有这个值?我试过:if(x == 0x-1。#IND000000000000)和其他变种但是没有用。是否可以检查变量是否具有此值?
答案 0 :(得分:10)
实际上,字符串-1.#IND000000000000
不是函数返回的值,但它是QNaN
,Quiet Not-a-Number
的常见表示形式之一,即特殊的IEEE-754值表示无效数字,不会导致异常(还有SNaN
,Signalling 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。,