关于实型变量的有效位数的问题
main(){
float a,b;
a=123456.789e5;
b=a+20;
printf( "%f ",b);
}
这是谭浩强的第二版C语言书第47页上的一个小程序段。谭说:“运行结果为12345678848.000000 ,可以看到,前8位是准确的,后即为是不准确的……”
请问,float实型变量只能保证有效数字为7位, 而书上却说‘前8位是准确的’, 请该是 前七位是准确的吧??
[解决办法]
float只能保证7位有效数字的精度,这个是它本身的设计格式决定了的,跟显示无关。
显示时只是printf,cout等标准库设施默认为float保留7位小数,这个跟格式没有直接关系,只是设计I/O库的人觉得这样好。
显示的位数跟实际保存的数没有任何直接关系,你可以通过printf格式控制符或cout的manipulator来控制浮点数打印到屏幕上的时的位数,但那并不代表你修改了那个浮点数。
比如,对于浮点数3.14159265358,在调用printf时,你可以随心所欲的让它显示成:3.1,3.14,3.142等等,这些只是printf的格式控制功能,跟浮点数本身的精度无关。只不过默认情况下,printf和cout都选择了显示6位小数而已,为了统一、好看。