|

楼主 |
发表于 2011-8-2 21:44:21
|
显示全部楼层
这几天临时有一些事,忙死了,现在才来公布答案,对不起各位了。
首先要说明的是,对于一个很大的float类型的数f,++f或者f+50,值还是f,因为浮点数本身就只是近似表示,事实事实上,浮点数是用一种类似科学计数法的形式记录数据的(学名叫IEEE754),即只记录尾数和指数。所以当尾数很长的时候,就只记录高位的尾数忽略低位的尾数。所以2000000001表示为2.000000001+10^9由于尾数太长,所以尾数中的1将被省略,表示为形如2.000000+10^9(为了说明方便,我仅用10进制来说明,不具体列举IEEE754规范了,涉及太多的无关概念)。
关于这一点,我们可以写程序验证如下:- #include<stdio.h>
- int main(){
- float f = 2000000000;
- unsigned int *pi = (unsigned int *)&f;
- printf("f =\t%x\n",*pi);
- ++f;
- printf("f+1 =\t%x\n",*pi);
- f+=50;
- printf("f+50 =\t%x\n",*pi);
- }
复制代码 |
|