先握个手,我也是看这个《C语言入门经典》学的C;
你可以把那句话理解成“有效数字6到7位”;意思就是从左到右6个数字是有效的,其他可能正确也可能是个随机值;
你可以做个试验把3333.3333333...(20个3)分别赋给3个类型(float, double, long double)的变量,再分别用他们的输出符号 %f %lf %Lf(long double好多编译器并不支持) 看看输出结果,你就明白了;
给你两张图,第一张是运行结果,第二张是调试的结果,我的编译器不支持long double,所以没有它的变量,不过你应该能看明白,再不明白就没办法了:
这样能看明白不?
2 精度
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。