<分区>
我正在做一本编程书 A Book on C 的练习。该练习表明,要找到一组数字的平均值,算法:
avg += (x - avg) / i;
优于:
sum += x;
avg = sum / i;
'x' 是用于存储输入数字的变量。它还建议除了防止溢出外,第一种算法确实比第二种算法有一些其他好处,有人可以帮助我吗?谢谢!
<分区>
我正在做一本编程书 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/