浮點數的表示
計算機沒辦法表示小數點。
定點數:如純小數0.1011和純整數11110
科學計數法
十進制:299792458m/s=2.998*10^8m/s
浮點數
以適當的形式將比例因子表示在數據中,讓小數點的位置根據需要而浮動
相當於使用兩個定點數拼接而成的
浮點數基本格式
階碼E反映浮點數的表示范圍及小數點的實際位置;尾數M的數值部分的位數n反映浮點數的精度
例子:
注意,正數的補碼還是自己
漏了1位
如此操作
浮點數的規格化
規格化:規定尾數的最高數位必須試一個有效值
左規:當浮點數運算的結果為非規格化時要進行規格化處理,將尾數左移一位,階碼減1(基數為2時)
右規:當浮點數運算的結果尾數出現溢出(雙符號位為01或10)時,將尾數右移一位,階碼加1(基數為2時)
右規例子:
規格化浮點數的尾數M的絕對值應滿足:1/r≤|M|≤1
規格化浮點數的特點
IEEE 754標准
一般形式
隱藏表示最高位1
若尾數是xx...xxx則表示尾數1.xx..xxx
短浮點數float,單精度
長浮點數double,雙精度
浮點數的運算
加減運算
浮點數加減運算步驟:
- 對階
- 尾數加減
- 規格化
- 舍入
- 判溢出
0.轉換格式(用補碼表示階碼和尾數)
寫成小數形式,尾碼右移,階碼加
寫成補碼(取反+1),題目中要求階符2位
擴展尾數:11.011000000
y也進行相同處理
1.對階
使兩個操作數的小數位置對齊。求階差,小階變大階,尾數每右移一位,階碼+1
11111是-1的補碼
向右移動了1位,階碼+1
2.尾數加減
階碼這時候已經相等了。
尾數相加減,注意,出現了溢出
3.規格化
右規,記得階碼+1
4.舍入
這里舍掉的是0,無舍入
“0”舍“1”入法:類似於十進制數運算中的“四舍五入”法,即在尾數右移時,被移去的最高數值位為0,則舍去;被移去的最高數值位為1,則在尾數的末位加1.這樣做可能會使尾數又溢出,此時需要在做一次右規。
恆置“1”法:尾數右移時,不論丟掉的最高數值位是“1”還是“0”,都使右移后的尾數末位恆置“1”。這種辦法同樣有使尾數變大和變小的兩種可能。
5.判溢出
常階碼,無溢出,結果真值為2^-3*(-0.1001111)_2
強制類型轉換
機器字長:機器一次運算所能處理的數據長度
小轉大:不產生任何問題
范圍、精度從小到大,轉換過程沒有損失。
int->float:可能損失精度
float->int:可能溢出及損失精度