浮點數與移碼

2021-10-12 04:50:18 字數 1796 閱讀 4357

浮點數就是小數點可以任意浮動的數字。

因為在計算機的機器語言中,只有二進位制,機器語言只能識別0和1。所以,計算機也是不可能儲存小數的,那計算機如何表示小數呢,採用一般採用指數表示,如下圖所示。

但是指數表示的話表示方法也不盡相同,不停表示方法小數點的位置也不是固定的,因此我們稱計算機中這種指數形式的表示的數為浮點數。

相同的小數可以使用不同的儲存方法和規定,這無疑新增了計算和儲存的難度,為了方便計算和儲存,人們制定了統一的表示方法,其中最流行的就是ieee754 標準

已知小數可以表示成n=m×re的形式

如12.345=1.2345×101。

其中m(mantissa)被稱為浮點數的 尾數 ,r(radix)被稱為階碼的基數 ,e(exponent)被稱為階的 階碼 。計算機中一般規定r為2、8或16,是乙個確定的常數,不需要在浮點數中明確表示出來。

因此,在已知標準下,要表示浮點數,

一是要給出尾數m的值,通常用定點小數形式表示,它決定了浮點數的表示精度。。

二是要給出階碼,通常用定點整數形式表示,它指出的是小數點在資料中的位置,決定了浮點數的表示範圍。

為了提高資料的表示精度同時保證資料表示的唯一性,需要對浮點數做規格化處理。即要求尾數域的最高有效位應為1,稱滿足這種表示要求的浮點數為規格化表示:把不滿足這一表示要求的尾數,變成滿足這一要求的尾數的操作過程,叫作浮點數的規格化處理,通過尾數移位和修改階碼實現。

在單精度浮點數中 符號佔一位,階碼佔8位,尾數佔23位

在雙精度浮點數中

比如,二進位制原碼的規格化數的表現形式:(0正1負)

正數 0.1******

負數 1.1******

注意,尾數的最高位始終是1,因此我們完全可以省略掉該位。至此,我們引入ieee754 標準,該標準約束了浮點數的大部分使用設定:(尾數用原碼;階碼用「移碼」;基為2)。當然,在取回這樣的浮點數到運算器執行運算時,必須先恢復該隱藏位。

至於具體怎麼算的,階碼,尾數越大數越大,而階碼和尾數的位數都是確定的,基碼預設為2.不需要我寫出來了吧。

移碼:就是補碼的符號位取反。

優點:移碼是對於某乙個系列或集合的數使它們都對映到正數軸上去,即在數軸上把數都統一往右移動n位,使得所有的數都不為負數。加上偏移量的所有值都大於等於0。這裡的話,由於都不為負數,所以我們直接可以由移碼的表示形式看出對應數值的大小,

階碼經常做的操作是比較大小和加減,補碼是要變換成原碼再比較的,所以對於表示階碼,移碼是完美的選擇(這裡是把移碼當做無符號數來比較大小的,而不必考慮符號,方便比較!)我認為這是最主要的原因!

用移碼表示的話,簡化了對於「0」的判斷,即移碼的特殊值(0和max)被檢驗比較容易。

用移碼來表示階碼的話可以提高表示資料的精度。如果不是採用移碼來表示階碼的話,那麼階碼就會出現負值,這樣的話當需要把該資料轉換成非階碼浮點資料時我們將就需要對尾數進行左移(做乘法運算),這樣的話我們會發現最先移去的是尾數的高位,因此這種方法不利於資料的精度表示。而對於才用移碼表示階碼的話,我們在轉換時是做右移操作,這樣最先移去的是最低位,這樣比較好地保持了資料的精度。

浮點數的階碼,尾數與移碼

階碼與尾數 十進位制中通常乙個浮點數可以用科學技術法來表示,舉例 306.5可以表示為 0.3065 103 其中 是符號,指數3是階或稱階碼,0.3065是小數部分 左右段非0包起來的部分是有效值 這裡的有效值是3065,小數部分也稱為尾數,顯然3065也是尾數 3.87的話 387是有效值 87...

整數與浮點數

整數和浮點數可以一起運算 四則運算 加法 num1 10 num2 0.5 reault num1 num2 print result 10.5 減法result num1 num2 print result 9.5 乘法result num1 mun2 print result 5 除法resul...

定點數與浮點數

1 定點數 定點數指小數點在數中的位置是固定不變的,通常有定點整數和定點小數。在對小數點位置作出選擇之後,運算中的所有數均應統一為定點整數或定點小數,在運算中不再考慮小數問題。1 定義 資料中小數點位置固定不變的數 2 種類 定點整數 3 小數點在符號位與有效位之間。注 定點數受字長的限制,超出範圍...