不同精度相加的问题?我觉得我没错啊,可结果却错了
#include "stdio.h"#include "math.h"
float average(int a[100],int n)
{
float sum=0,pjs;
int i;
for(i=0;i<n;i++)
{
sum=sum+a[i];
}
pjs=sum/n;
return pjs;
}
float qfc(int a[100],int n,float pjs)
{
int i;
float sum=0;
float fc; //这里定义sum也是单精度的,否则结果不对??
for(i=0;i<n;i++)
sum=sum+(a[i]-pjs)*(a[i]-pjs);
fc=sum/n;
return fc;
}
void main()
{
int a[100];
float pjs; //平均数
float bzc; //标准差
float fc; //方差
int i=0,n; //n个数
printf("请输入数据个数:n\n");
scanf("%d",&n);
printf("请输入数据\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
pjs=average(a,n);
printf("平均数为:%.2f\n",pjs);
fc=qfc(a,n,pjs); //求方差
printf("方差为:%.2f\n",fc);
bzc=sqrt(fc);
printf("标准差为:%.2f\n",bzc); //求标准差
}
看我注释的那段,就是这里"float fc; //这里定义sum也是单精度的,否则结果不对??"
为什么这里必须定义sum为单精度的结果才正确,我输入1 2 3结果方差是零??整型和单精度相加不是先将整型转换为双精度的再相加的吗??