标题:不同精度相加的问题?我觉得我没错啊,可结果却错了
取消只看楼主
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
已结贴  问题点数:5 回复次数:0 
不同精度相加的问题?我觉得我没错啊,可结果却错了
#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结果方差是零??整型和单精度相加不是先将整型转换为双精度的再相加的吗??
搜索更多相关主题的帖子: average include return 
2015-03-17 21:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-442766-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062850 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved