C++ C++;sqrt返回-1.#ind000000000000000000
具体而言: 我正在做一些数学运算,而应用程序不断崩溃,因为一个广泛使用的double恰好得到值:-1.#IND000000000000,当“某些”数字是sqrt'ed时。。。 这是什么?不确定?无限的?太大而放不下?不是一个完美的平方根?有什么办法解决这个问题吗? 提前谢谢!C++ C++;sqrt返回-1.#ind000000000000000000,c++,sqrt,C++,Sqrt,具体而言: 我正在做一些数学运算,而应用程序不断崩溃,因为一个广泛使用的double恰好得到值:-1.#IND000000000000,当“某些”数字是sqrt'ed时。。。 这是什么?不确定?无限的?太大而放不下?不是一个完美的平方根?有什么办法解决这个问题吗? 提前谢谢! 编辑:如何检查double是否具有此值?我尝试了:if(x==0x-1.#IND000000000000)和其他变体,但没有成功。是否可以检查变量是否具有此值?如果不使用复杂类型,任何低于0的值的sqrt都意味着导致异常。
编辑:如何检查double是否具有此值?我尝试了:if(x==0x-1.#IND000000000000)和其他变体,但没有成功。是否可以检查变量是否具有此值?如果不使用复杂类型,任何低于0的值的sqrt都意味着导致异常。如果参数为负,则会发生域错误,将全局变量errno设置为值EDOM。该值
#IND000000000000
表示无效的数值。这通常称为QNaN(安静的非数字)值,因为它表示不确定的类型,但不会导致计算失败
很可能,您试图确定其平方根的难以捉摸的数字是负数,该值未定义。有关更多信息,请参阅
解决它首先需要您确定问题发生的位置。这意味着您需要使用调试器一步一步地检查它并观察变量的值,或者发布您的代码以便我们可以执行相同的操作。事实上,字符串
-1.#IND000000000000
不是由函数返回的值,而是QNaN
的常见表示形式之一,Quiet Not-a-Number
,表示无效数字的特殊IEEE-754值,不会导致异常(还有SNaN
,信令NaN
,如果启用,将导致浮点异常)。导致这种情况的常见原因是调用参数不在其域中的函数。它是一个NaN(不是数字)。这意味着您调用了带有否定参数的sqrt
Cheers&hth.,可以通过检查
x==x
来检测NaN(例如,您拥有的“不确定”和“无限”)(NaN为假,任何有限数为真)。是否某些数
可能小于0?告诉我,先生,-1的sqrt是什么?显然,EnabrenTane的意思是,“什么是-1.0的IEEE 754 sqrt?”@Noah Roberts:我很难用浮点数来表示。也许它会返回一个字符:-)我敢打赌原因不是sqrt(-1)
,而是sqrt(-1E-20)
左右。当两个近似相等的项几乎取消时会发生这种情况,例如sqrt(100.0/3.0-(50.0/3.0+50.0/3.0))
。由于FP精度有限,此参数不完全是0.0
,可能被舍入为负数。是的,许多特定位布局表示相同的“NaN值”。