我有一个浮点数组,它存储了一些由某些函数计算出来的值。但是,当我从数组中检索一个值时,其中一些值为-1。#IND,这是一个浮点错误或某种我认为。
所以继承我的小问题,如何使用if语句检查float数组是否包含-1。#IND值,以便我可以用它做什么?
由于
答案 0 :(得分:9)
if(a!= a); 只有当a是NaN时才会出现这种情况。 哦,还有在cmath中有一个isnan()函数。 More About isnan()...
答案 1 :(得分:2)
-1。#IND是NaN代码(不是数字),因为该值未定义/不可表示。因此,如果数值算法产生NaN值,则可能存在问题。检查浮点异常是否已打开,因为除以0错误可导致NaN,并确保在调试模式下运行它,逐步查看它何时,如何以及为何发生。
不确定您是否可以进行直接相等比较,因为表示可以更改,
检查IEEE 754,同时检查您的编译器是否使用IEEE 754浮点数。
希望这有帮助。
答案 2 :(得分:1)
-1.#IND
看起来像是“无限期”值,如果您尝试计算0/0这样的话会出现。
您可能遇到的其他值是正无穷大。
要过滤掉这些特殊值,请使用_finite
,finitef
或_fpclass
等功能。
答案 3 :(得分:0)
检查浮点值是否为有效数字的好方法是使用:std :: isnormal() 如果数字不正常,你可以使用std :: fpclassify()来确定它是什么错误。