浮點數的表示和運算


浮點數的表示

計算機沒辦法表示小數點。

定點數:如純小數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,雙精度

\[規格化的短浮點數的真值:(-1)^S*1.M*2^{E-127} \]

\[規格化的長浮點數的真值:(-1)^S*1.M*2^{E-1023} \]

浮點數的運算

加減運算

浮點數加減運算步驟:

  1. 對階
  2. 尾數加減
  3. 規格化
  4. 舍入
  5. 判溢出

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:范圍-2^{31}...2^{31}-1,有效數字32位 \]

\[float:范圍±[2^{-126}...2^{127}*(2-2^{-23})],有效數字23+1=24位 \]

int->float:可能損失精度

float->int:可能溢出及損失精度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM