複製鏈接
請複製以下鏈接發送給好友

FLOAT

(數據類型)

鎖定
浮點型數據類型,FLOAT 數據類型用於存儲單精度浮點數雙精度浮點數浮點數使用 IEEE(電氣和電子工程師協會)格式。浮點類型的單精度值具有 4 個字節,包括一個符號位、一個 8 位 二進制指數和一個 23 位尾數。由於尾數的高順序位始終為 1,因此它不是以數字形式存儲的。 [1] 
中文名
浮點型
外文名
float
使用格式
IEEE格式
類    型
單精度浮點型
佔用空間
32位、4個字節

FLOAT基本介紹

FLOAT構成

浮點數在機內用指數型式表示,分解為:數符,尾數,指數符,指數四部分。
數符佔 1 位二進制,表示數的正負。
指數符佔 1 位二進制,表示指數的正負。
尾數表示浮點數有效數字,0.xxxxxxx, 但不存開頭的 0 和點。
指數存指數的有效數字。
指數佔多少位,尾數佔多少位,由計算機系統決定。 [2] 

FLOAT區別

可根據應用程序的需求將變量聲明為 float 或 double。這兩種類型之間的主要差異在於它們可表示的基數、它們需要的存儲以及它們的範圍。 [3] 
取值範圍
類型
比特數
有效數字
float
32
6-7
double
64
15-16
long double
128
18-19
浮點變量由尾數(包含數字的值)和指數(包含數字的數量級)表示。
下表顯示了分配給每個浮點類型的尾數和指數的位數。任何 float 或 double 的最高有效位始終是符號位。如果符號位為 1,則將數字視為負數;否則,將數字視為正數。
指數和尾數
類型
指數長度
尾數長度
float
8 位
23 位
double
11 位
52 位
由於指數是以無符號形式存儲的,因此指數的偏差為其可能值的一半。對於 float 類型,偏差為 127;對於 double 類型,偏差為 1023。您可以通過將指數值減去偏差值來計算實際指數值。
存儲為二進制分數的尾數大於或等於 1 且小於 2。對於 float 和 double 類型,最高有效位位置的尾數中有一個隱含的前導 1,這樣,尾數實際上分別為 24 和 53 位長,即使最高有效位從未存儲在內存中也是如此。
浮點包可以將二進制浮點數存儲為非標準化數,而不使用剛剛介紹的存儲方法。“非標準化數”是帶有保留指數值的非零浮點數,其中尾數的最高有效位為 0。通過使用非標準化格式,浮點數的範圍可以擴展,但會失去精度。您無法控制浮點數以標準化形式還是非標準化形式表示;浮點包決定了表示形式。浮點包從不使用非標準化形式,除非指數變為小於可以標準化形式表示的最小值。
下表顯示了可在每種浮點類型的變量中存儲的最小值和最大值。此表中所列的值僅適用於標準化浮點數;非標準化浮點數的最小值更小。請注意,在 80x87 寄存器中保留的數字始終以 80 位標準化形式表示;數字存儲在 32 位或 64 位浮點變量(float 類型和 long 類型的變量)中時只能以非標準化形式表示。 [1] 

FLOAT浮點類型

類型
最小值
最大值
float
1.175494351 E – 38
3.402823466 E + 38
double
2.2250738585072014 E – 308
1.7976931348623158 E + 308
如果存儲比精度更重要,請考慮對浮點變量使用 float 類型。相反,如果精度是最重要的條件,則使用 double 類型。 [1] 
浮點變量可以提升為更大基數的類型(從 float 類型到 double 類型)。當您對浮點變量執行算術時,通常會出現提升。此算術始終以與具有最高精度的變量一樣高的精度執行。例如,請考慮下列類型聲明:
float f_short;double f_long;long double f_longer;f_short = f_short * f_long;
在前面的示例中,變量f_short提升到類型 double 並且與f_long相乘;然後,結果舍入到類型 float,然後賦給f_short。
在以下示例中(使用前面示例中的聲明),將以浮點(32 位)精度對變量執行算術;結果隨後將提升到 double 類型:
f_longer = f_short * f_short;
double f_long;
long double f_longer;
f_short = f_short * f_long;
在前面的示例中,變量f_short提升到類型 double 並且與f_long相乘;然後,結果舍入到類型 float,然後賦給f_short。
在以下示例中(使用前面示例中的聲明),將以浮點(32 位)精度對變量執行算術;結果隨後將提升到 double 類型:
f_longer = f_short * f_short;

FLOAT應用示例分析

在 C 和 C++ 中,如下賦值語句:
float a=0.1; 
編譯器報錯:warning C4305: 'initializing' : truncation from 'const double ' to 'float '
原因:在 C/C++ 中,上述語句等號右邊 0.1,認為是個 float,但是編譯器卻把它認為是個 double(因為小數默認是 double),所以要報這個 warning,一般改成0.1f就沒事了。
參考資料
  • 1.    譚浩強 .C程序設計(第4版):清華大學出版社,2010.6
  • 2.    索明何,邢海霞,方偉駿 .C語言程序設計:機械工業出版社,2016.2
  • 3.    林小茶,陳昕 .C程序設計教程(第3版):清華大學出版社,2018.6