6

定期的に取得したデータのタイム ストリームを取得しましたが、データが取得されないポイントがあるため、そのポイントの配列に 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 をカウントする必要がありますが、有効な数値に無効な値を追加しても、有効な数値は同じままであると言う方法があればいいでしょう。

これを行うより良い方法があるかどうかはわかりませんが、確認したかったのです。ありがとう、ジェームズ

4

4 に答える 4

7

NANの算術演算は必要なことを行わないため、NANで要求することはできません。NAN オペランドを含む加算の結果は NAN です。

追加のアイデンティティを探しています。つまり、配列にゼロを入れる必要があります。さて、それを行うと、どの要素が無効であるかを他の場所で追跡し、それに応じて対処する必要があります。しかし、値の配列を合計し、特定の値が寄与しないようにしたい場合、唯一の選択肢はそれらの値をゼロにすることです。

率直に言って、あなたの現在の解決策は、NANをチェックするために std::isnan() を使用することを除いて、あなたが得るのと同じくらい良いと思います。

于 2013-11-12T10:34:58.663 に答える
3

NaN をチェックするより良い方法はstd::isnan関数です。

指定された浮動小数点数 arg が非数 (NaN) かどうかを判断します。

于 2013-11-12T10:23:26.967 に答える
1

あなたはワンライナーについて説明しますがsum += std::isnan(data[i]) ? 0 : data[i];、それ以上に簡単なことはありません。

于 2013-11-12T12:24:18.657 に答える