【发布时间】:2019-01-05 08:49:54
【问题描述】:
我正在尝试解决一个问题,但遇到了一些问题。
我必须找到一系列数字的运行平均值。
示例:
input 4 2 7
output 4 3 4.3333
现在问题来了,虽然我得到了答案,但这不是准确的答案。
接受的输出:accuracy difference shown in the image
290.6666666667
385.4000000000
487.8333333333
477.4285714286
496.4444444444
...
523.8571166992
506.0454406738
495.3043518066
我找不到问题所在。一些帮助将不胜感激。
#include<stdio.h>
main(){
int n;
printf("set:");
scanf("%d",&n);
float arr[n+1],resarr[n+1];
float sum=0;
for(int i=1; i<=n; i++){
scanf("%f",&arr[i]);
sum=arr[i]+sum;
float res= sum/(float)i;
resarr[i]=res;
}
int i=1;
while(i<=n) {
printf("%0.10f\n",resarr[i]);
i++;
}
return 0;
}
【问题讨论】:
-
您似乎忘记了数组索引是从零开始的。 IE。
n元素的数组,索引从0到n - 1(含)。 -
“最大运行时间”(您的标题)与您的问题有什么关系?
-
@Someprogrammerdude 我很抱歉完全是我的错,我的意思是运行时的平均值
-
您知道
float的精度非常有限吗?如果你改用double会发生什么?另外,请阅读Is floating point math broken? -
解决了,非常感谢!