實數(浮點數)
一、實數常數的表示方法
實數也稱為浮點型。實數常數也稱為實數或者浮點數。在C語言中,實數只採用十進位。它有二種形式:十進位小數形式,指數形式。
1) 十進位數字形式:由數碼0~ 9和小數點組成。
例如:
0.0、25.0、5.789、0.13、5.0、300.、-267.8230
等均為合法的實數。注意,必須有小數點。
2) 指數形式:由十進位數字,加階碼標誌“e”或“E”以及階碼(只能為整數,可以帶符號)組成。
其一般形式為:
a E n(a為十進位數字,n為十進位整數),其值為 a*10n。
如:
2.1E5 (等於2.1*105)
3.7E-2 (等於3.7*10-2)
0.5E7 (等於0.5*107)
-2.8E-2 (等於-2.8*10-2)
以下不是合法的實數:
345 (無小數點)
E7 (階碼標誌E之前無數位)
-5 (無階碼標誌)
53.-E3 (負號位置不對)
2.7E (無階碼)
標準C允許浮點數使用尾碼。尾碼為“f”或“F”即表示該數為浮點數。如356f和356.是等價的。
【例】說明了這種情況。
#include<stdio.h> main(){ printf("%f\n ",356.); printf("%f\n ",356); printf("%f\n ",356f); } |
二、實數變數
1. 實數資料在記憶體中的存放形式
實數資料一般占4個位元組(32位元)記憶體空間。按指數形式存儲。實數3.14159在記憶體中的存放形式如下:
+ |
.314159 |
1 |
數符 小數部分 指數
小數部分占的位元(bit)數愈多,數的有效數字愈多,精度愈高。
指數部分占的位元數愈多,則能表示的數值範圍愈大。
2. 實數變數的分類
實數變數分為:單精確度(float型)、雙精度(double型)和長雙精度(long double型)三類。
在Turbo C中單精確度型占4個位元組(32位元)記憶體空間,其數值範圍為3.4E-38~3.4E+38,只能提供七位有效數字。雙精度型占8 個位元組(64位元)記憶體空間,其數值範圍為1.7E-308~1.7E+308,可提供16位有效數字。
類型說明符 比特數(位元組數) 有效數字 數的範圍
類型說明符 |
bit數(位元組數) |
有效數字 |
數的範圍 |
float |
32(4) |
6~7 |
10-37~1038 |
double |
64(8) |
15~16 |
10-307~10308 |
long double |
128(16) |
18~19 |
10-4931~104932 |
實數變數定義的格式和書寫規則與整型相同。
例如:
float x,y; (x,y為單精確度實數量)
double a,b,c; (a,b,c為雙精度實數量)
3. 實數資料的舍入誤差
由於實數變數是由有限的存儲單元組成的,因此能提供的有效數字總是有限的。如下例。
【例】實數資料的舍入誤差。
#include<stdio.h> main() { float a,b; a=123456.789e5; b=a+20 printf("%f\n",a); printf("%f\n",b); } |
注意:1.0/3*3的結果並不等於1。
【例】
#include<stdio.h> main() { float a; double b; a=33333.33333; b=33333.33333333333333; printf("%f\n%f\n",a,b); } |
從本例可以看出,由於 a 是單精確度浮點型,有效位數只有七位。而整數已占五位元,故小數二位後之後均為無效數字。
b 是雙精度型,有效位為十六位。但Turbo C 規定小數後最多保留六位元,其餘部分四捨五入。