c语言问题

[复制链接]
查看11 | 回复5 | 2009-7-14 05:40:24 | 显示全部楼层 |阅读模式
补充:你可以这样理解。main(){int a,i=0.000000000000000000001;if(a=i-0.000000000000000000001);printf("00000000000000000");}按理说这句应该不会显示那一堆00000000000000的 ,但是却显示了...本来变量a应该为0的,由于误差导致上面的if句成为:if(a=i),a不等于0了。所以那句没错。(与源语句没出入吧?)你看到了结果,没看到过程。顺便提下,不反对 可爱小爬爬大大的观点。小数部分转换成2进制是乘以2,进位置1的原则。小数乘以2,大部分永远都不可能为一。如:0.4560.456*2=0.9...
回复

使用道具 举报

千问 | 2009-7-14 05:40:24 | 显示全部楼层
我说了啊,你的a定义的类型是float型,你不是定义的int型。而在计算机内部没有浮点数的0.0,而是用一个非常非常小的小数来表示0.0,所以也不能用==来比较。原因就在这里。说实话,本不想来掺和。但是为正视听,我觉得有义务发出声音。整数是可以精确比较的,比如int a=0;if(a==0)...但是对于浮点数0.0在计算机内部不是真...
回复

使用道具 举报

千问 | 2009-7-14 05:40:24 | 显示全部楼层
如果直接写0应该不会有错.但数据一般是要用来进行运算的,进行浮点运算时,因计算机浮点数类型的精度不够而导致某些过小的数被忽略掉,本应是0的结果会变成接近于0的小数,所以要用书上的这种方法.比如下面的程序,我们能看出来结果是0,但0.0000000001太小了,float表示不了,所以实际程序并没有显示OK#includema...
回复

使用道具 举报

千问 | 2009-7-14 05:40:24 | 显示全部楼层
零当然不同 在float a时给a分配了4字节的存储空间而inta就2字节int型的0 就是0 float 0是0.000000 还有在有的编码中0还分+0和-0之分...
回复

使用道具 举报

千问 | 2009-7-14 05:40:24 | 显示全部楼层
应该是a==0吧,非要说的话,可以试下a==0.000000呵...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行