各位c语言的学习者一个值得探讨的问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 23:59:58
#include<stdio.h>
main()
{
int a=539634;float c;

// if(1)
c=(float)a/100;
printf("%f",c);

}
把if(1)这句话注释掉和不注释掉结构会有不同这是为什么
出来的显示结果的小数位不同 请各位试一下 用visualc++

对啊,很奇怪
注释掉以后,就是5396.340000
不注释的话,就是5396.339844

无从解释,毕竟if(1)的有无好像没关系啊

不过这么也从另一面验证了float和double的数据不稳定性。
计算机的浮点计算的确会有偏差,这个是确定的。这也是为什么判断2个double型double a, b;的数字是否相等的时候不是直接if(a==b),而是保险的采用if(fabs(a-b)<1e-6)的原因。

至于你说的这个现象,除了浮点误差外,还真不能解释。

注释掉后,c=(float)a/100; 也就等于被作废了。
那么也就没有c= 5396.34了。c依然出于没有被赋值的状态,也就是当时内存地址里一个不确定的值。