【发布时间】:2014-06-19 02:18:07
【问题描述】:
这是 Al Kelley/Ira Pohl 的 A Book On C(3rd Edition) 第 60-61 页上的一个问题:
以下代码片段显示了计算运行平均值的两种不同方法:
int i;
double x;
double avg= sum= 0.0;
double navg;
for (i=1; scanf("%lf", &x)==1; ++i)
{
avg+= (x-avg)/i;
sum+= x;
navg= sum/i;
}
书中写的原始问题是:如果您输入一些“普通”数字,avg 和 navg 似乎是相同的。通过实验证明 avg 更好,即使 sum 没有溢出。
作为初级程序员,我的问题是:
“更好”算法的标准是什么?我认为精度和运行时间是两个关键因素,但还有其他因素可以让算法“更好”吗?
在精度和运行时间方面,如何通过实验证明在排除溢出的情况下,avg 仍然是比 navg 更好的方法?我是否应该使用“与众不同”的数字,例如,大小差异很大的数字?
【问题讨论】:
-
真的是c#吗? :P
-
在什么意义上更好?精确?还是什么?
-
“我如何通过实验证明”——使用幅度差异很大的值。
-
如果我知道“更好”的标准是如何定义的,我就不会发布这个问题了。