c语言中关于有效数字的问题

zhaoquan74 2002-06-06 10:47:15
在C语言中,有效数字的含义是什么,对于FLOAT型的数,C语言的书一讲了有7的有效数字。但如0.0001058954,它的有效数字是什么。如果还有一个FLOAT型数0.0001058955,它们的比较结果是什么?
...全文
496 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiang_nan 2002-06-06
  • 打赏
  • 举报
回复
float的有效位数是7位,小数点下为6位,因此0.0001058954的有效数字是0.000105
0.0001058964和0.0001058964这两个数字在分别赋值给两个float型变量后的值应该是相等的.
dgj 2002-06-06
  • 打赏
  • 举报
回复
我的结论是写程序马虎不得,重要的地方一定要自己动手测试,千万不能想当然。
dgj 2002-06-06
  • 打赏
  • 举报
回复
这是我的测试代码和结果,你看一下吧:
int main()
{
float f1;
float f2;

printf("--------------test 1 -------------\n");
printf("f1=0.0001058954,f2=0.0001058955;\n");
f1 = 0.00010589544;
f2 = 0.00010589545;

printf("f1=%.20f\n",f1);
printf("f2=%.20f\n",f2);

if(f1==f2)
{
printf("f1==f2\n");
}
else
{
printf("f1!=f2\n");
}

printf("--------------test 2 -------------\n");
printf("f1=0.00010589544,f2=0.0001058943;\n");
f1 = 0.00010589544;
f2 = 0.00010589543;

printf("f1=%.20f\n",f1);
printf("f2=%.20f\n",f2);

if(f1==f2)
{
printf("f1==f2\n");
}
else
{
printf("f1!=f2\n");
}

printf("--------------test 3 -------------\n");
printf("f1=0.00010589544,f2=0.0001058944;\n");
f1 = 0.00010589544;
f2 = 0.00010589544;

printf("f1=%.20f\n",f1);
printf("f2=%.20f\n",f2);

if(f1==f2)
{
printf("f1==f2\n");
}
else
{
printf("f1!=f2\n");
}

printf("--------------test 4 -------------\n");
printf("f1=0.000105895441,f2=0.00010589442;\n");
f1 = 0.000105895441;
f2 = 0.000105895442;

printf("f1=%.20f\n",f1);
printf("f2=%.20f\n",f2);

if(f1==f2)
{
printf("f1==f2\n");
}
else
{
printf("f1!=f2\n");
}

printf("--------------test 5 -------------\n");
printf("f1=0.000105895441,f2=0.00010589444;\n");
f1 = 0.000105895441;
f2 = 0.000105895444;

printf("f1=%.20f\n",f1);
printf("f2=%.20f\n",f2);

if(f1==f2)
{
printf("f1==f2\n");
}
else
{
printf("f1!=f2\n");
}

printf("--------------test 6 -------------\n");
printf("f1=0.000105895441,f2=0.00010589445;\n");
f1 = 0.000105895441;
f2 = 0.000105895445;

printf("f1=%.20f\n",f1);
printf("f2=%.20f\n",f2);

if(f1==f2)
{
printf("f1==f2\n");
}
else
{
printf("f1!=f2\n");
}

printf("--------------test 7 -------------\n");
printf("f1=0.000105895441,f2=0.00010589446;\n");
f1 = 0.000105895441;
f2 = 0.000105895446;

printf("f1=%.20f\n",f1);
printf("f2=%.20f\n",f2);

if(f1==f2)
{
printf("f1==f2\n");
}
else
{
printf("f1!=f2\n");
}

printf("--------------test 8 -------------\n");
printf("f1=0.000105895441,f2=0.00010589447;\n");
f1 = 0.000105895441;
f2 = 0.000105895447;

printf("f1=%.20f\n",f1);
printf("f2=%.20f\n",f2);

if(f1==f2)
{
printf("f1==f2\n");
}
else
{
printf("f1!=f2\n");
}

printf("--------------test 9 -------------\n");
printf("f1=0.000105895441,f2=0.00010589448;\n");
f1 = 0.000105895441;
f2 = 0.000105895448;

printf("f1=%.20f\n",f1);
printf("f2=%.20f\n",f2);

if(f1==f2)
{
printf("f1==f2\n");
}
else
{
printf("f1!=f2\n");
}
}


[guest@sunserver/export/home/guest/volee/test]$gcc a.c
[guest@sunserver/export/home/guest/volee/test]$./a.out
--------------test 1 -------------
f1=0.0001058954,f2=0.0001058955;
f1=0.00010589543671812862
f2=0.00010589545127004385
f1!=f2
--------------test 2 -------------
f1=0.00010589544,f2=0.0001058943;
f1=0.00010589543671812862
f2=0.00010589542944217101
f1!=f2
--------------test 3 -------------
f1=0.00010589544,f2=0.0001058944;
f1=0.00010589543671812862
f2=0.00010589543671812862
f1==f2
--------------test 4 -------------
f1=0.000105895441,f2=0.00010589442;
f1=0.00010589544399408624
f2=0.00010589544399408624
f1==f2
--------------test 5 -------------
f1=0.000105895441,f2=0.00010589444;
f1=0.00010589544399408624
f2=0.00010589544399408624
f1==f2
--------------test 6 -------------
f1=0.000105895441,f2=0.00010589445;
f1=0.00010589544399408624
f2=0.00010589544399408624
f1==f2
--------------test 7 -------------
f1=0.000105895441,f2=0.00010589446;
f1=0.00010589544399408624
f2=0.00010589544399408624
f1==f2
--------------test 8 -------------
f1=0.000105895441,f2=0.00010589447;
f1=0.00010589544399408624
f2=0.00010589544399408624
f1==f2
--------------test 9 -------------
f1=0.000105895441,f2=0.00010589448;
f1=0.00010589544399408624
f2=0.00010589545127004385
f1!=f2

liushmh 2002-06-06
  • 打赏
  • 举报
回复
0.0001058954 有效数字 为0。0001058
C语言的书 有关有效数字,好像还有另外几种表示法。

比较结果为相等

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧