深入理解浮點數的表示方法

2021-09-28 13:43:37 字數 1049 閱讀 6102

為了在計算機裡面表示浮點數,人們定義了一些標準,來描述浮點數

本文的浮點數介紹基於ieee 754標準,這個標準廣泛運用於許多cpu和浮點處理器上

ieee的浮點標準為:

圖1顯示的分別是單精度(float) 和雙精度(double)表示形式。

乙個ieee標準的浮點數是由【規格化數】+【非規格化數】+【特殊的數】組成,下文將分別對這三個組成部分一一介紹:

【規格化數】

【定義】:當exp不全為0,也不全為1時則為規格化數

人們為了更廣的定義浮點數,對規格化數中的exp進行了細分,在規格化數中最大的exp為

看了浮點數的表現形式,就有疑惑了,這個小數點打在**?

標準是這樣定義【規格數】小數點的:

對於二進位制浮點數,小數點左側必須只有一位且必須為1

為了節省空間,小數點的左側的1須省去(實際計算的時候由硬體電路加上)

所以抽象點想,小數點其實就打在了exp和frac的中間,但對於規格化數的運算時,m=1+frac。

那麼單精度的浮點數計算公式:

【非規格化數】

【定義】:當exp為全0時,所表示的數就是非規格化數

非規格數主要解決的問題是浮點數表示0的問題,其次是解決那些近視於0的數:

對於二進位制浮點數,當exp全為0的時候,小數點左側必須只有一位且必須為0

所以計算非規格化數的時候,m=0+frac。

不光是這點不同,

非規格數e(指數)的表示方法也不一樣,雖然exp為0但是

在規格化數中最小的數表達形式是

【特殊的數】

最後人們又定義了一些特殊的數:

當階碼全為1,且尾數字全為0,則該數表示為無窮,s(符號位)為1表示正無窮,為0表示負無窮。

當階碼全為1,且尾數字不全為0,這表示nan,該數表示為「not a number」(不是乙個數),這個東西很有用,當一些運算的結果不能用實數或無窮來表示的時候,就可以用該數表示,例如:

浮點數的表示方法

把乙個數的有效數字和數的範圍在計算機的乙個儲存單元中分別予以表示。這種把數的範圍和精度分別表示的方法,相當於數的小數點位置隨比例因子的不同而在一定範圍內可以自由浮動,所以稱為浮點表示法。在計算機中乙個任意二進位制數n可以寫成 n 2 e.m 其中m稱為浮點數的尾數,是乙個純小數。e是比例因子的指數,...

浮點數的表示

在定點數表示中存在的乙個問題是,難以表示數值很大的資料和數值很小的資料。例如,電子的質量 9 10 28克 和太陽的質量 2 1033克 相差甚遠,在定點計算機中無法直接表示,因為小數點只能固定在某乙個位置上,從而限制了資料的表示範圍。為了表示更大範圍的資料,數學上通常採用科學計數法,把資料表示成乙...

浮點數的表示

日期 2010年6月 6日 1.前幾天,我在讀一本c語言教材,有一道例題 includevoid main void 執行結果如下 num的值為 9 pfloat的值為 0.000000 num的值為 1091567616 pfloat的值為 9.000000 我很驚訝,num和 pfloat在記憶...