gpt4 book ai didi

c++ - 如何计算 double 的平均值,使总误差最小?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:29 25 4
gpt4 key购买 nike

假设我们有一个很长的 double 组,比如说,N == 1000000

array<double, N> arr;

计算平均值有两种简单的方法。首先

double result = 0;
for (double x : arr) {
result += x;
}
result /= arr.size();

当值的总和很大时,这可能不准确。 float 会失去精度。

另一种方法是:

double result = 0;
for (double x : arr) {
result += x / arr.size();
}

当数字较小时,这可能会失去精度。

是否有任何故障安全方法来计算 float 的简单平均值?仅使用标准库的解决方案值得赞赏。

最佳答案

如果你想从 double 中获得更高的准确性,你可以使用 Kahan summation最后除以元素数。然而,据我所知,没有 Kahan 求和的标准库实现。

一种简单、标准的方法(几乎像作弊)当然是使用长 double 进行计算,基本上使用您的第一个实现,只将结果转换回 double 。

关于c++ - 如何计算 double 的平均值,使总误差最小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44084089/

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