关于c中实型数据的舍入误差问题!

来源:百度知道 编辑:UC知道 时间:2024/09/23 05:02:13
谭浩强第二版c,实型数据的舍入误差中说,1.0/3*3的结果并不等于1,但在tc2.0下运行结果为1。请高手指点!
main()
{float a;
a=1.0/3*3;
printf("a=%f",a);
}
在tc2.0下结果为1.000000
不太眀白,为何?

1.0/3*3先计算1.0/3=0,那么结果自然就是0
tc2.0的运行结果你再仔细检查看你的定义,和输出方式看看,有没有其他问题
float是浮点形,可以保存6-8位
1/3就不能等于0,等于0.333333
所以a自然是1.000000

实型数的表示存在误差,是在计算机内部采用俘点表示的原因,你看到的运行结果为1,只能说明是:在你打印输出的有限位数中(或者采用系统的缺省位数输出),没有能将有误差的部分显示出来,比如误差可能是0.0........01,如果你求1.0/3*3==1的结果,可能就碰到不成立的情况。