使用if语句将数组中的NaN值转换为0.0?

3

我正在使用点和它们之间的向量进行一些计算,当点非常接近时,得到nan值对我来说并不奇怪。现在我想做的是清除存储在数组中的所有nan值以及好的数据。我希望可以只使用下面这段代码:

   if( angle[i] == nan ) { angle[i] = 0.0 };

至少这是我尝试过的,但当我尝试时遇到了错误。有人知道如何摆脱NaN值并用0.0替换它们吗?


1
修改你的标签以获得更好的答案。 - Pencho Ilchev
你使用的是哪种编程语言? 你遇到了什么错误? - bradreaves
2个回答

7
假设这是C语言,那么请使用<math.h>中的isnan函数:
#include <math.h>

if (isnan(angle[i]))
{
    angle[i] = 0.0;
}

我没有尝试过你的方法,但我相信它也会起作用。在我自己寻找解决方案时,我遇到了这种方法几次,但不确定如何实现它。 - Linux Rules
x!=x通常比isnan(x)更快地检查nan。后者仅在避免引发浮点异常标志方面有用,但如果您不关心/不使用浮点异常标志,则x!=x更好。 - R.. GitHub STOP HELPING ICE
isnan用于C99,_isnan用于Visual C。 - BLUEPIXY

5

据我所记,无论是哪种语言,NaN都会与任何值(包括其本身)进行比较时返回false。您可以利用这种行为来排除它:

if( angle[i] != angle[i] ) { angle[i] = 0.0 };

这看起来像是C、C++或Java,这个技巧在这些语言中都适用。

那就是解决方法。我读过它总是返回false的相关内容,但没有想到尝试一下。 - Linux Rules

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接