【发布时间】:2020-03-09 07:25:38
【问题描述】:
我有一个很长的浮点正数列表(std::vector<float>,大小约为 1000)。数字按降序排列。如果我按照顺序对它们求和:
for (auto v : vec) { sum += v; }
我想我可能会遇到一些数值稳定性问题,因为接近向量末尾的sum 会比v 大得多。最简单的解决方案是以相反的顺序遍历向量。我的问题是:这种方法和前瞻案例一样有效吗?我会丢失更多缓存吗?
还有其他智能解决方案吗?
【问题讨论】:
-
速度问题很容易回答。对其进行基准测试。
-
速度比准确性更重要吗?
-
不是完全重复,但非常相似的问题:sum of series using float
-
你可能要注意负数。
-
如果您真的很在意高精度,请查看Kahan summation。
标签: c++ floating-point precision