gpt4 book ai didi

c++ - 对大数组求和时出现错误结果

转载 作者:行者123 更新时间:2023-11-30 00:45:28 25 4
gpt4 key购买 nike


当我尝试对大数组求和时,我总是得到错误的结果。我已经将问题隔离到以下代码示例(它不是一个大数组的总和,但我相信这就是问题所在)

可编译示例:

template <typename T>
void cpu_sum(const unsigned int size, T & od_value) {
od_value = 0;
for (unsigned int i = 0; i < size; i++) {
od_value += 1;
}
}

int main() {
typedef float Data;
const unsigned int size = 800000000;
Data sum;
cpu_sum(size, sum);

cout << setprecision(35) << sum << endl; // prints: 16777216 // ERROR !!!
getchar();
}

环境:

操作系统:Windows 8.1 x64 家庭版
IDE:Microsoft Visual Studio 2015

错误描述:

虽然我的结果显然应该是 sum == 800000000,但我一直得到 sum == 16777216
这对我来说很奇怪,因为 float max 值远高于这个值,但看起来 sum 变量达到了它的极限。

我错过了什么??

最佳答案

这是一个众所周知的问题。逐渐地,您的总和变得如此之大,以至于下一个被加数变得与它的 epsilon(大约 10^-14)相当。在那一刻你开始失去精度。

标准解决方案是改变求和策略:当数组大于 100 个元素时,将其分成两半并分别对每一半求和。它以递归方式进行,并倾向于更好地保持精度。

关于c++ - 对大数组求和时出现错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43301253/

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