小甲鱼的铁粉 发表于 2020-7-5 18:08:59

c语言float输出不精确

求平均分的程序,输入格式
5
92 76 69 58 88
用计算器算出来是76.6,输出是76.599998,为什么呢?
#include<stdio.h>
void pj(int n,float a[])
{
        int i;
        float s=0,result;
        for(i=0;i<n;i++)
                s=s+a;
        result = s/(n*1.0);
        printf("%d门课程平均分:%.6f\n",n,result);
}
int main()
{
        int n,i;
        float a;
        scanf("%d",&n);
        for(i=0;i<n;i++)
                scanf("%f",&a);
        pj(n,a);
        return 0;
}

qiuyouzhi 发表于 2020-7-5 18:10:28

本帖最后由 qiuyouzhi 于 2020-7-5 18:47 编辑

精度问题呗,用double试试
#include<stdio.h>
void pj(int n,double a[])
{
      int i;
      double s=0,result;
      for(i=0;i<n;i++)
              s=s+a;
      result = s/(n*1.0);
      printf("%d门课程平均分:%lf\n",n,result);
}
int main()
{
      int n,i;
      double a;
      scanf("%d",&n);
      for(i=0;i<n;i++)
            scanf("%lf",&a);
      pj(n,a);
      return 0;
}
这样就成了

Twilight6 发表于 2020-7-5 18:10:33




这个应该是和 Python 一个道理吧,浮点数本身都无法精确

小甲鱼的铁粉 发表于 2020-7-5 18:26:25

Twilight6 发表于 2020-7-5 18:10
这个应该是和 Python 一个道理吧,浮点数本身都无法精确

是的{:10_250:}

Hello. 发表于 2020-7-5 18:27:48

问题好难,很多简单的小数压根不能精确存储,所以也就不能精确输出
https://blog.51cto.com/10984944/2475898

小甲鱼的铁粉 发表于 2020-7-5 18:29:34

Hello. 发表于 2020-7-5 18:27
问题好难,很多简单的小数压根不能精确存储,所以也就不能精确输出
https://blog.51cto.com/10984944/2475 ...

好像确实是因为小数进制转换所以有误差

永恒的蓝色梦想 发表于 2020-7-5 18:39:37

小甲鱼的铁粉 发表于 2020-7-5 18:29
好像确实是因为小数进制转换所以有误差

对的。

Hello. 发表于 2020-7-5 18:41:17

永恒的蓝色梦想 发表于 2020-7-5 18:39
对的。

{:10_256:}

永恒的蓝色梦想 发表于 2020-7-5 18:43:29

qiuyouzhi 发表于 2020-7-5 18:10
精度问题呗,用double试试

这样就成了

printf("%d门课程平均分:%.lf\n",n,result);别说误差了,小数部分直接没了

qiuyouzhi 发表于 2020-7-5 18:44:51

永恒的蓝色梦想 发表于 2020-7-5 18:43
别说误差了,小数部分直接没了

噗,我记得我把小数点去掉了..

永恒的蓝色梦想 发表于 2020-7-5 18:46:32

qiuyouzhi 发表于 2020-7-5 18:44
噗,我记得我把小数点去掉了..

{:10_277:}
页: [1]
查看完整版本: c语言float输出不精确