計算機中,數字分為定點數和浮點數。相對於浮點數,定點數比較好理解,原碼補碼反碼移碼。而浮點數十分繁雜。
關於浮點數的繁雜,我覺得最好的解釋就是,\(william\ m. kahan\)因其在浮點數運算標準的制定上的突出貢獻而獲得圖靈獎。\(kahan\)也是浮點數\(ieee754\)標準的主要設計師。
初識浮點數:
假如說我們現在想要表示光速這樣乙個數值,我們可以怎麼做?
兩種方法比較:
浮點數的表示:
通常,浮點數可以表示為:\(n=r^e*m\)。
其中\(r\)是階碼的底,通常為\(2\),且與尾數的基數相同。
\(e\)是階碼,\(m\)是尾數。
如下所示:
階碼是整數,階符和階碼共同表示浮點數的表示範圍以及小數點的實際位置;
數符表示正負,尾數的數值表示浮點數的精度。
浮點數規格化:
先看門見山講一下什麼叫規格化。
規格化規定尾數的最高數字必須是乙個有效值。
通過以上的閱讀,我們可以發現,要想讓精度最大化,那麼我們就需要讓尾數部分盡可能的儲存有效的數字。
比如說對於這兩個數(二進位制)
這兩個數是相等的,但是第二個數明顯可以在尾數上少儲存一位\(0\),所以這時候我們可以對浮點數進行規格化,讓他能表示更高的精度。
所謂規格化,是指通過一定的操作改變浮點數的尾數和階碼的大小,讓浮點數(非0)的尾數在最高位保證是乙個有效值。
有如下兩種方法:
那麼規格化的浮點數的尾數的範圍就是\(\frac\leq |m|\leq 1\)。
分析:負數:
假設用補碼來表示尾數:
負數:按照\(ieee754\)標準,浮點數表示格式如下:
為了最大幅度的增大浮點數表示精度,我們尾數最高位如果為\(1\)我們將其隱藏。舉個例子,假如說尾數是\(1011\),那麼我們儲存\(011\)。
\(float\)和\(double\)都是滿足\(ieee754\)標準的浮點數。
階碼以移碼形式存在。對於短浮點數\(float\),偏置值為\(127\),對於長浮點數\(double\),偏置值為\(1023\)。
那麼可以這麼求:我先將\(e\)的看成補碼形式求出其值,然後減去\(127/1023\)就是他的移碼代表的值。
浮點數運算需要將階碼運算和尾數運算分隔開。且分成以下幾步:
接下來一一分析。
對階:對階的目的是讓兩個運算元階碼相等。原則是小階向大階看齊的方法。將階碼小的數尾數右移,階碼加一知道階碼相等。當然因為右移需要捨棄資料,所以精度會受影響。
規格化:
捨入:溢位判斷:
最後一步需要判斷溢位。
在浮點數規格化部分已經知道尾數雙符號位出現\(01,10\),並不表示溢位,將此數右規即可。
浮點數的溢位是由階碼決定的。雙符號階碼出現\(01/10\),這時候就溢位了。
2 3 浮點數的表示與運算
返回目錄 計算機組成原理筆記目錄 2019 王道考研 2.3 浮點數的表示與運算 本節主要內容 1.基本格式 2.規格化 3.表示範圍 4.ieee754標準 5.浮點數的加減運算 6.浮點數的強制型別轉換 1.基本格式 2.規格化 規定尾數的最高數字必須是乙個有效值 1.左規 當浮點數運算的結果為...
資料運算 浮點數表示與加減運算
由於浮點數尾數的小數點均固定在第一位數值前,可以預見浮點數的運算實質上是定點數運算。但是由於階碼的不同,尾數對應小數點位置實際是不同的,需要通過轉化使小數點對齊後,才能直接進行加減運算。浮點數加減運算大致可以分為如下幾步 對階 使兩小數點位置對齊 尾數運算 尾數進行加減運算 規格化 為增加有效數字尾...
浮點數的表示
在定點數表示中存在的乙個問題是,難以表示數值很大的資料和數值很小的資料。例如,電子的質量 9 10 28克 和太陽的質量 2 1033克 相差甚遠,在定點計算機中無法直接表示,因為小數點只能固定在某乙個位置上,從而限制了資料的表示範圍。為了表示更大範圍的資料,數學上通常採用科學計數法,把資料表示成乙...