計算機中浮點數的表示

2022-07-20 17:18:33 字數 1348 閱讀 1980

在c語言中浮點數有兩個size,32位和64位。其中32位浮點數:第1位是signflag(符號位),2-9位是階碼位(exponent),10-32位是尾數字(significand)。64位分別是第1位,2-12位,13-64位。

浮點數大小的公式是:\(x = (-1)^ * 2^e*m\)

\(e = exp-(2^-1)\),將\(exp\)看作無符號整數,\(k\)為\(exp\)的位數。

例如,對於32位浮點數來說\(k = 8,e\in[-126,127]\),對於64位浮點數來說\(k=11,e\in[-1022,1023]\)。

\(m = 1+0.frac\),將\(frac\)看作小數值。

例如\(frac = 1011_2\),那\(m = 1_2+0.1011_2 = 1.1011_2 = 1\dfrac\)。

這是通常情況下(規格化值)的計算公式,還有三種特殊情況。

當\(exp=0\)時,即是非規格化的值,這時:

\(e = 1-(2^-1),k\)為\(exp\)的位數。

例如,對於32位非規格化值\(k=8,e = 1-(2^7-1) = -126\),對於64位來說\(k=11,e=1-(2^10-1)=-1022\),我們發現非規格化的\(e\)和規格化的\(e\)的下界相等,這會導致非規格化值到規格化值的平滑轉換。

\(m = 0.frac\)

當\(exp的\)位模式全為1時,也就是無符號整數的最大值,這時為特殊值,有兩個特殊值:

當\(frac=0\)時,浮點數為無窮大

否則,浮點數為nan(not a number),例如:\(\sqrt\) 。

ieee標準中,由於精度問題,當乙個浮點數無法準確表示乙個實數時需要進行捨入。所用的方法是向偶數捨入。

用幾個例子說明:

數字捨入後

1.41

1.62

1.52

2.52

3.54

如果該數字正好在上下界之間,則向偶數捨入,與我們通常的四捨五入略有區別。這樣做的好處是:當有一組浮點數放在一起求平均值時可以保證誤差最小,因為每個在上下界之間的數字都有百分之五十幾率向下捨入,百分之五十幾率向上捨入。

對於二進位制小數也是如此

二進位制小數

捨入後(保留小數點後一位)

10.01

10.0

10.011

10.1

10.11

11.0

11.001

11.0

計算機中浮點數的表示

浮點數就是有小數點的數。在c語言中有三種浮點數,分別為float,double和long double。下面分析一下其實現。include int main int argc,char argv 這是乙個簡單的c語言程式,定義了三個不同型別的變數a b c。編譯後用gdb除錯下 gdb p size...

浮點數在計算機中的表示

浮點數在計算機中的表示 最後編輯於 2010 4 13 計算機中數字是以0和1二進位制儲存的,我們熟悉的是整數的如何在計算機中表示,那麼浮點數是如何表示的呢?一 轉換 我們先來看看如何將十進位制的浮點數轉換成二進位制。乙個十進位制的浮點數,例如 abcd.efg 其中a g為0.9 其值用多項式為 ...

計算機中的浮點數

寫這篇blog,是因為在上工程碩士數學時候,又開始講到了浮點數的儲存,運算和精度的問題。這個問題已經見了好多次了,從微機原理的課到計算機視覺處理矩陣時候的conditioning,到這次。但感覺一直都沒有理清楚。所以這次嘗試梳理一下。一般主要分為兩種形式,這裡以8位的儲存進行解釋 所以用浮點數表示數...