相同的程序,不同的输出,求解惑!!
先看第一张图,我给a赋值是十二个8,然而同样的a同样的代码,值竟然差了3000多!
再看这个程序,这次我给a赋值是九个8, a的两次值却是一样的。问:这是为什么?【可以的话,情抄录下面的代码【第一图的代码】在自己的机器上运行一下,谢谢!】
代码如下:
#include "stdio.h"
void main()
{
float a=888888888888;
printf("%f\n",a);
printf("%f",a);
}
float a=888888888;
[解决办法]
将一个10进制数转换成2进制数,并将其表示为 指数与尾数的方式,存在无法精确表示的问题,对于超出范围的部分就被截掉了。
如果 float a = 888888888888;//12个8
就只能保障前面6个8是对的,即一个10进制float ,如果其前7位 小于 2^23次方(8388608),那么就有7位精度,否则就是6位精度,对于2进制来说,就是23位的精度。
这就存在:多个10进制数,对应同一个float的现象,那么当一个float浮点数转换成10进制数时,该转换成哪个10进制数呢?原则上说,这是一个一对多问题,使用哪个都可以说是正确的,
这其中需要进行浮点数计算,也就是说跟硬件(8087协处理器)是相关的了。如果使用软件浮点库计算,则与浮点库相关。
不过,我上面说是随机的,确实是错误。它确实不是随机的,但在不同的协处理器上,可能是不一样的。