gpt4 book ai didi

c++ - 高效稳定的有序数之和

转载 作者:行者123 更新时间:2023-12-02 00:48:44 26 4
gpt4 key购买 nike

我有一个很长的浮点正数列表( std::vector<float> ,大小〜1000)。数字按降序排列。如果我按照顺序对它们进行求和:

for (auto v : vec) { sum += v; }

我想我可能会遇到一些数值稳定性问题,因为接近 vector 的末尾 sum将比v大得多。最简单的解决方案是以相反的顺序遍历 vector 。我的问题是:这和前向情况一样有效吗?我会丢失更多缓存吗?

还有其他聪明的解决方案吗?

最佳答案

bench-marked您的用例和结果(参见附图)表明向前或向后循环不会产生任何性能差异。

您可能还想在硬件+编译器上进行测量。

<小时/>

使用 STL 执行求和,其速度与手动循环数据一样快,但更具表现力。

使用以下内容进行反向累积:

std::accumulate(rbegin(data), rend(data), 0.0f);

而向前累积:

std::accumulate(begin(data), end(data), 0.0f);

enter image description here

关于c++ - 高效稳定的有序数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58838104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com