读书人

float数在无法精确表示的整数怎么舍入

发布时间: 2012-12-30 10:43:15 作者: rapoo

float数在无法精确表示的整数如何舍入?
当float数大于2^24=16777216时,不能完全精确表示之后的整数,例如16777219,16777221等等~
那此时,究竟是怎么舍入的呢?
比如说16777219,就舍入成为16777220.
而16777217,就舍入成为16777216......
那么究竟是怎么舍入的啊?求指点~运行下面程序,结果为
a=16777216.000000
b=16777220.000000
~~!


#include <math.h>
#include<iostream>
int main()
{
float a,b;
a=16777217.0;
printf("a=%f\n",a);
b=16777219.0;
printf("b=%f\n",b);
return 0;
}

[解决办法]
#include <math.h>
#include<iostream>
int main()
{
float a,b;
a=16777217.0;
printf("a=%f\n",a);//其二进制是1 0000 0000 0000 0000 0000 0001
//写成1.0000 0000 0000 0000 0000 000 1
//float阶码最多23位,double是52位
b=16777219.0;
printf("b=%f\n",b);//舍去的规则(大于进位那位一半就进位,小于舍去,等于进位保持为偶数)
return 0; //所24位的1要舍去。b表示的最后是1不用舍去。(向偶数靠其符合统计学);
}

最后我写一下他们在内存中的整个表示
a:0 10010110 0000000000000000000
b:0 10010110 0000000000000000001
符号 阶码 数值

读书人网 >C语言

热点推荐