【发布时间】:2020-10-27 10:31:53
【问题描述】:
我想知道是否有任何方法可以计算方差而不将值存储在数组中或其他东西。 我能够为均值做到这一点,并且也能够近似计算方差,但不是很准确。 这是我使用的代码:
#include <stdio.h>
#include <math.h>
int main()
{
int n, temp;
float sum = 0, crm = 0, var = 0;
printf("Enter number of elements : ");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
printf("Enter number %d :", i + 1);
scanf("%d", &temp);
sum = sum + temp;
crm = sum / ((float)i + 1);
var = (var*i + (temp - crm) * (temp - crm) )/ ((float)i + 1);
}
printf("\naverage : %f,appprox variance : %f\n", sum / (float)n, var);
}
【问题讨论】:
-
“不太准确”是什么意思?你使用了什么输入,你得到了什么,你期望什么?
-
好的,我在这个程序中得到了大约 10% 的错误
-
用于“在线”方差计算的浮点算法通常不稳定,因为浮点精度有限。最好使用Welford's algorithm,它会给出正确的结果。