我们有定时采集数据的时间流,但在某些时候没有采集数据,因此我们在此时将QNAN放入数组中。唯一的问题是,每当我们对数据进行任何统计时,每次我们访问某个位置时都要检查它是不是NAN。所以我们的平均惯例看起来像
int n = 0;
double sum = 0;
for(int i = 0; i < SIZE; i++)
{
if(data[i] == data[i])
{
sum += data[i];
n++;
}
}
我们可能总是要计算NAN的数量,但如果有一种说法,如果你向有效数字添加无效值,那么会很好。有效数字保持不变。
我不确定是否有更好的方法,但想检查一下。 谢谢, 詹姆斯
答案 0 :(得分:7)
由于NANs上的算术不能满足您的需求,因此您无法使用NAN执行您所要求的操作。包含NAN操作数的加法结果是NAN。
您正在寻找附加身份。这意味着你需要在数组中加零。现在,如果你这样做,那么你将不得不跟踪哪些元素无效并相应地处理它。但是,如果您希望能够对值数组求和,并且某些值没有贡献,则唯一的选择是将这些值设置为零。
坦率地说,我认为您当前的解决方案与您将获得的一样好,模块化使用std :: isnan()来检查NAN。
答案 1 :(得分:3)
检查NaN的更好方法是std::isnan
功能。
确定给定的浮点数arg是否不是数字(NaN)。
答案 2 :(得分:1)
您描述了oneliner sum += std::isnan(data[i]) ? 0 : data[i];
并且它并不容易。
答案 3 :(得分:0)
您可以使用std::isnan在其他检查之前检查值。