缘起:一个执行不完的循环
float f;
for(f=0;f<1E8;f+=1){
//printf("%f ",f);
}
printf("OK\n");
上面这个循环总也无法执行完毕,究竟是为什么呢?
原因:(白色文字,请选中查看)
浮点数无法精确表示所有的整数。当f达到16777216之后,f+1的16777217无法被表示出来,经过舍入之后仍为16777216。
float能够表示的连续整数范围
-16777216到+16777216(0xFF000000-0x1000000),即±2^24
float能够表示的连续偶数范围
-33554432到+33554432(0xFE000000-0x2000000),即±2^25
float的表示精度
正常情况下不超过2/166777216,大概是800万分之一。
(注:超过表示范围的极大值或非常接近于0的极小值精度除外)
按照IEEE754标准,单精度浮点数使用32bit来存储,其中符号位1bit,底数23bit,阶码(移码)8bit