浮點數格式學c
的時候就知道,浮點數採用的是類似於科學計數法的表示方式。具體的浮點數的模型是:
乙個尾數(
mantissa
),乙個基數(
base
),乙個指數(
exponent
)和符號位表示。
float
和double
的表示格式列個**:
型別儲存位數
偏移值符號位(s)
指數字(e)
尾數字(m)
總位數十六進製制
十進位制單精度 float 1
位 8位
23位
32位0x7fh
+127
雙精度 double 1
位 11 位
52位64位
0x3ffh
+1023
不過有些細節是不得不說的:
基數————
這個基數是可以使用者定義的,一般是
2,但取10,
16也是可以的。如何指定呢?
在標頭檔案
float.h
中定義了巨集
flt—radix
,它的值就是選定的基數。
尾數———— 這是個定點小數,採用原碼儲存。尾數的最左端隱含了
1,也就是說
23位全部用來表示小數,而實際表示的數是
24位精度。
指數————
這當然是整數,不過採用移碼儲存。
為了處理負指數的情況,要把實際指數值加上乙個偏移值作為儲存值(
float
為127;double
為1023
)。對單精度浮點而言,有效的指數範圍是
-126~127
(儲存值為
1~254
,這是因為兩個端點值用作特殊值表示)。
ieee
754
定義了什麼
只要一說到浮點數,這個標準是不能不提的。那麼這個標準主要規定了哪些東西呢?a、
浮點數的格式:
除了上面提到的兩種基本的浮點格式,還定義了這兩種格式的擴充套件。
但標準只規定擴充套件格式的最小精度和大小。例如,
ieee
雙精度擴充套件格式必須至少具有64
位有效數字,並總共占用至少
79位。b、
4
種浮點數捨入方式:
這些捨入方式是可以由
float.h
中的巨集flt—rounds
指定的。c、
5
種浮點異常:
如果產生異常,就會影響異常向量表,有些還會產生中斷。至於中斷,異常處理當然不是本文要討論的。
d、特殊值:
(還記得指數部分沒有用到的兩個端點值麼?)
這個標準規範的東西當然不止這些,還有一些關於運算準確度要求、不同型別資料間轉換及不同進製資料間的轉換等等。
其實這裡談到的是浮點數最老的標準,新標準應該也有幾個了吧,最好的資料當然就是這些標準的文件,倘若有時間,仔細看看還是有好處的。
庫檔案float.h
最初很多處理器在硬體方面並不支援浮點運算,因為這會增加不少成本,不支援浮點運算,會使微處理器設計的複雜度減半。之所以需要浮點運算,是因為科學計算等一些高精度運算的需要的存在。float.h
這個檔案的構造當然是要遵循這個標準的,不過這個標頭檔案並有太多的東西。除了前面提到過的兩個巨集,這個標頭檔案還定義了一些關於浮點數取值範圍的巨集。
其實也沒有特別的理由要來認識這個庫,畢竟即使是做數值計算的演算法,也可以用
matlab
這個彪悍的工具。不過,在了解了這個標頭檔案後,約定整數範圍的
limits.h
就很容易看清楚了。不過這也僅限於認識這個庫,至於它要怎麼實現就又是另乙個層次的問題了。
參考文章:定點數與浮點數的區別。(文章不錯,雖然有些小錯誤)
IEEE 浮點數標準
現在計算機中,浮點數一般採用 ieee 制定的國際標準,這種標準形式如下 數符s 階碼 含階符 尾數 小數點位置 按 ieee 標準,常用的浮點數有三種 符號位s 階碼 尾數 總位數 短實數 單精度 1 8 23 32 長實數 雙精度 1 11 52 64 臨時實數 擴充套件精度 1 15 64 8...
C 浮點數詳解
ieee 754規定任意乙個二進位制浮點數v可以表示成下面的形式 v 1 s m 2 ev 1 s m 2 e v 1 s m 2e例如下圖是32位單精度浮點數儲存模型 其中s表示符號位,當s 0,v為正數 當s 1,v為負數。m表示有效數字,1 m 2 規約形式 e表示指數字。eg 十進位制的6....
浮點數及其國際標準
浮點數 float 又稱作浮點數,是屬於有理數中某特定子集的數的數字表示,在計算機中用以近似表示任意某個實數。具體來說,這個實數由乙個整數或定點數 即尾數 乘以某個基數 計算機中通常是2 的整數次冪得到,這種表示方法類似於基數為10的科學記數法。浮點計算是指浮點數參與的運算,這種運算通常伴隨著因為無...