为什么循环给出的结果与累积的结果不同
Why is a Loop Giving Different Results Than accumulate?
我在这里发布了一个实现 Kahan's Sum 的答案: https://stackoverflow.com/a/41743731/2642059 我在 accumulate
中使用了 lambda:
accumulate(next(cbegin(small)), cend(small), big, [c = 0.0](const auto& sum, const auto& input) mutable {
const auto y = input - c;
const auto t = sum + y;
c = t - sum - y;
return t;
} )
这应该与for
-循环具有相同的结果:
auto sum = big;
auto c = 0.0;
for (long i = 0; i < size(small); ++i) {
const auto y = small[i] - c;
const auto t = sum + y;
c = t - sum - y;
sum = t;
}
但事实并非如此。给定vector<double> small(10000000, 1e-7)
accumulate
收益率:
1.9999999900000000e+00
虽然for
循环产生:
2.000000000000000e+00
http://coliru.stacked-crooked.com/a/3cb0e3c542303eb4
的现场示例
这是怎么回事?这 2 个应该计算出完全相同的代码!
在累积示例中,您不会循环访问整个值集。 next(cbegin(small))
将从cbegin(small)
之后的元素开始。试试这个。
accumulate(cbegin(small), cend(small), big, /*the lambda*/);
相关文章:
- 在更改for循环的第三部分后,未使用for循环结果
- 密码登录程序将永远循环并显示不正确的结果
- 为什么在递归中使用循环会产生意想不到的结果?
- 当我用"ñ"字符循环访问字符串时出现奇怪的结果
- 有没有办法将 for 循环结果返回到像三元运算符这样的函数中?
- 如何在 for 循环中显示一个结果
- 如何修复循环中的错误产生的错误结果?
- 我的循环超时并且不显示结果
- 在 for 循环中仅显示序列的最后一个结果
- C 编程:在循环时运行 2 并从 loop1 获取数据的随机结果
- C++ 3 for 循环中,结果不应重复
- C++ 循环以在表中输出结果
- 循环中的IF-ELSE条件:未来的迭代覆盖以前的迭代结果
- std::chrono 不同的结果 - 固定的时间步长循环
- 如何在 for 循环中取下第一个结果,使其不会重复
- 为什么循环给出的结果与累积的结果不同
- 嵌套循环导致奇怪的结果
- OpenMP循环结果为零
- 在与 OpenMP 并行的嵌套 for 循环中写入共享数组(通过指针)如何产生错误的结果
- 使用For循环显示1个结果