#include<stdio.h>
main()
{
float a;
double b;
a=123456.789e4;
b=123456.789e4;
printf("%f\n%f\n",a,b);
}
运行结果
[leo@localhost ~]$ cd lyj
[leo@localhost lyj]$ gcc float.c
[leo@localhost lyj]$ ./a.out
1234567936.000000
1234567890.000000
[leo@localhost lyj]$
- 为什么float类型输出的数和double类型不一样?
float类型可以精确表示7个十进制有效数位,后面的数位是舍入后的结果,舍入结果可能会更大也可能会更小;所以1234567前七位是精确表示的,后面的位数可能舍,可能入。
double类型可以精确到17个十进制有效数位,对于b来说,可以全部输出。
- 为什么float类型只能精确表示7个十进制数位?
从浮点数二进制表示格式可以知道,尾数部分表示的是23位有效数位,因为23位尾数表示的是小数点右边的数,小数点左边有一位默认为1的位,所以一共有24位有效数位,=16777215,转化为十进制<16777215<,所以float类型只能精确到7位。
- 注意:这只能说明超过7位一定不能精确表示,而小于7位有可能被精确表示。0.1就不能被精确表示,因为浮点数表示的并不是连续的数,而是离散的数。
网友评论