c - 找到平均值的更好算法

标签 c algorithm

<分区>

我正在做一本编程书 A Book on C 的练习。该练习表明,要找到一组数字的平均值,算法:

avg += (x - avg) / i;

优于:

sum += x;
avg = sum / i;

'x' 是用于存储输入数字的变量。它还建议除了防止溢出外,第一种算法确实比第二种算法有一些其他好处,有人可以帮助我吗?谢谢!

最佳答案

我假设我们在这里讨论的是浮点运算(否则“更好”的平均值会很糟糕)。

在第二种方法中,中间结果 (sum) 会无限制地增长,这意味着您最终会失去低端精度。在第一种方法中,中间结果应该与您的输入数据保持大致相似的幅度(假设您的输入没有很大的动态范围)。这意味着它将更好地保持精度。

但是,我可以想象随着i 越来越大,(x - avg)/i 的值会越来越小并且不太准确(相对)。所以它也有它的缺点。

关于c - 找到平均值的更好算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6227543/

相关文章:

c - 如何计算 (int*) % int ?

c - 有没有更好的方法来读取 C 中的复杂二进制数据?

在 C 中将字符串值转换为等效的 int

algorithm - 如何最佳解决这个问题?

c - 将文件中的旧字符串修改为新字符串

algorithm - 寻找网络中最大流的 Ford Fulkerson 算法的运行时间分析

algorithm - 一般位计数

java - 树算法中水平上的齐次值

javascript - 如何计算javascript中的日出和日落?

c - 如何使用C计算unsigned char的长度?