#include<stdio.h>
main()
{
float a;
double b;
a=123456.789e4;
b=123456.789e4;
printf("%f\n%f\n",a,b);
}
運行結(jié)果
[leo@localhost ~]$ cd lyj
[leo@localhost lyj]$ gcc float.c
[leo@localhost lyj]$ ./a.out
1234567936.000000
1234567890.000000
[leo@localhost lyj]$
- 為什么float類型輸出的數(shù)和double類型不一樣?
float類型可以精確表示7個十進制有效數(shù)位宣脉,后面的數(shù)位是舍入后的結(jié)果竹祷,舍入結(jié)果可能會更大也可能會更兴芰辍;所以1234567前七位是精確表示的兼都,后面的位數(shù)可能舍扮碧,可能入慎王。
double類型可以精確到17個十進制有效數(shù)位,對于b來說漫蛔,可以全部輸出蠕嫁。
- 為什么float類型只能精確表示7個十進制數(shù)位剃毒?
從浮點數(shù)二進制表示格式可以知道益缠,尾數(shù)部分表示的是23位有效數(shù)位,因為23位尾數(shù)表示的是小數(shù)點右邊的數(shù)胰伍,小數(shù)點左邊有一位默認為1的位骂租,所以一共有24位有效數(shù)位但汞,=16777215,轉(zhuǎn)化為十進制<16777215<,所以float類型只能精確到7位。
- 注意:這只能說明超過7位一定不能精確表示,而小于7位有可能被精確表示懊纳。0.1就不能被精確表示,因為浮點數(shù)表示的并不是連續(xù)的數(shù),而是離散的數(shù)脚囊。