浮點數的表示
-
為了表示浮點數,數被分為兩部分:整數部分和小數部分,在計算機中一個任意二進制數N可以寫成: N=2^e.M。
-
浮點數的表示格式:
浮點數的表示法以適當的形式將比例因子表示在數據中,讓小數點的位置根據需要而浮動。這樣,在位數有限的情況下,既擴大了數的表示范圍,有保持了數的有效精度。
階碼:階碼是整數,階符和 m 位階碼的數值部分共同反映 浮點數的表示范圍及小數點的實際位置 ,常用移碼或補碼表示。IEEE754標准中采用移碼的表示形式。
尾數:數符表示浮點數的符號,尾數的數值部分的位數 n 反映浮點數的 精度 ,常用原碼或補碼表示。IEEE754標准中采用原碼的表示形式。
-
浮點數的規格化
規格化:規定尾數的最高數位必須是一個有效值。非規格化浮點數要進行規格化操作才能變成規格化浮點數。
左規:當浮點數運算的結果為非規格化時要進行規格化處理,將尾數算術左移一位,階碼減1(基數為2時)。
右規:當浮點數運算的結果尾數出現溢出(雙符號位為01或10)時,將尾數算術右移一位,階碼加1(基數為2時)。
-
浮點數規格化的特點
當浮點數尾數的基數為2時,原碼規格化數的尾數最高位一定是1,補碼規格化數的尾數最高位一定與尾數符號位相反,基數不同,浮點數的規格化形式也不同。當基數為4時,原碼規格化形式的尾數最高兩位不全為0,當基數為8時,原碼規格化形式的尾數最高3位不全為0。
-
浮點數的表示范圍
1、由於階碼可以用移碼或補碼表示,尾數可以用原碼或補碼表示,所以不同形式的浮點數的表示范圍是不同的。(但必須遵守規則,原碼規格化數的尾數最高位一定是1,補碼規格化數的尾數最高位一定與尾數符號位相反)。
2、運算結果大於最大正數時稱為正上溢,小於絕對值最大負數稱為負上溢。數據一旦發生上溢,計算機必須中斷運算操作,進行溢出處理。
3、運算結果在0至最小正數之間時稱為正下溢,在0至絕對值最小負數之間時稱為負下溢。數據發生下溢時,浮點數值趨於0,計算機僅將其當作機器0處理。
-
IEEE 754浮點數標准
補充:變形補碼
概念:變形補碼,又稱”模4補碼“即用兩個二進制位來表示數字的符號位,其余與補碼相同。變形補碼,用“00”表示正,用“11”表示負,也稱為模4的補碼。用變形補碼進行加減運算時,當運算結果的符號位出現“01”或者“10”時,則表示產生溢出。變形補碼的最高位(第一個符號位)總是表示正確的符號,比如"00"、 “01”分別表示正數、正溢出(上溢),"11"、“10”表示負數、負溢出(下溢)。
示例:
1、產生01的情況:
補碼:
0 111
+ 0 010
————
1 001
兩個正數相加出現了負數,明顯有誤,就是說此時產生了上溢出(注:補碼運算時符號位也參與運算)
變形補碼:
00 111
+ 00 010
————
01 001
此時讀數時,由於左邊的符號位是0,所以表示正數,讀成+9,而不像模二補碼中變成了-7
2、產生10的情況:
補碼:
1 001
+ 1 010
————
10 011
溢出一位后,結果變成了0 011,兩個負數相加出現了正數,明顯有誤,就是說此時產生了下溢出(注:補碼運算時符號位也參與運算)
變形補碼:
11 001
+ 11 010
————
110 011
溢出一位后,結果變成了10 011,此時讀數時,由於左邊的符號位是1,所以表示負數,讀成-3,而不像模二補碼中變成了+3
(注:產生01和10時,讀數時右邊那一位符號也要算在數字里面)