【发布时间】:2022-11-29 23:52:39
【问题描述】:
我是 C++ 菜鸟。
我想要做的是对双精度向量的值求和(我们称它为x)并忽略任何 NaN 值。我试图查找它,但我找不到任何具体引用如果向量包含任何 NaN 值会发生什么的内容。
例如。:
// let's say x = [1.0, 2.0, 3.0, nan, 4.0]
y = sum(x) // y should be equal to 10.0
accumulate 函数可以在这里工作吗?或者如果x包含NaN,它会返回NaN吗? for 循环是否可以在此处使用条件检查值是否为NaN(如果是,我如何检查是否为NaN?在我最了解的 Python 语言中,这种检查并不总是那么简单) .
【问题讨论】:
-
这回答了你的问题了吗? Checking if a double (or float) is NaN in C++
-
一旦 NaN 进入总和,它就会变粘。您需要编写自己的
sum并使用std::isnan跳过 NaN 值。 -
任何有效数字 + NaN == NaN;在执行累加之前过滤掉所有 NaN,或者在检查
std::isnan时在循环中手动求和。您还可以将std::accumulate与您的自定义二元运算符一起使用,但要使此运算符实现稳健,您需要对 lhs 和 rhs 进行不必要的检查。