資料表示基礎:舍入誤差
|
來自規範 : 資料表示基礎 - 舍入誤差 瞭解並能夠解釋為什麼定點和浮點表示的小數可能不精確。 |
為了使一個實數能夠被二進位制數系統精確表示,它必須能夠用給定位數的二進位制小數表示。某些值永遠無法精確表示,例如 0.110。
處理器中的數學運算通常使用固定數量的位執行。例如,將 8 位加到 8 位。這通常不會造成任何問題。
00110011 (51) +00001010 (10) -------- 00111101 (61)
但如果我們將以下數字加在一起會發生什麼
01110011 (115) +01001010 (74) -------- 10111101 (189)
這似乎執行良好,但我們遇到了問題。如果我們處理的是二進位制補碼數,將兩個正數加在一起的結果為負數!
01110011 (115) +01001010 (74) -------- 10111101 (-67!)
讓我們看一下另一個問題示例,溢位的問題。
1010 (-6)
+1010 (-6)
--------
(1)0100 (+4!)
如您在上面的總和中看到的,我們將兩個負數加在一起,結果是正數。
為了處理上述情況,我們使用狀態暫存器。
| 標誌 | 名稱 | 描述 |
|---|---|---|
| Z | 零標誌 | 指示算術或邏輯運算(或有時是載入)的結果為零。 |
| C | 進位標誌 | 使大於單個字(在上面的示例中為 4 或 8 位)的數字能夠透過根據需要將二進位制數字從較小的字進位到較大字的最低有效位來進行加/減運算。 |
| S / N | 符號標誌 / 負數標誌 | 一個指示結果是否為負數,而另一個指示是否發生了減法或加法。 |
| O | 溢位標誌 | 指示操作的帶符號結果太大而無法使用二進位制補碼表示方式放入暫存器寬度中。 |
| P | 奇偶校驗標誌 | 指示最後一個結果的設定位數是奇數還是偶數。 |
|
狀態暫存器工作 對於我們之前遇到的總和,我們將看一下如何使用狀態暫存器來阻止出現不正確的結果。 01110011 (115) +01001010 (74) -------- 10111101 (-67) 狀態暫存器:Z = False | C = False | N = True | O = True | P = Even 使用這些標誌,您可以看到結果為負數,如果原始總和只使用正值,那麼我們知道我們有一個錯誤。 看一下另一個方程 1010 (-6)
+1010 (-6)
----
(1)0100
狀態暫存器:Z = False | C = True | N = False | O = True | P = Odd 使用這些標誌,您可以看到結果為正數,而原始結果使用的是兩個負數。我們還可以看到發生了溢位。 |
|
練習:狀態暫存器 以下 4 位總和的結果有什麼問題? 1011 (-5)
+1011 (-5)
----
答案 結果會導致溢位,從而給出不正確的結果。 1011 (-5)
+1011 (-5)
----
(1)0110 (+6)
在計算的背景下,溢位是什麼? 答案 當計算結果太大而無法放入固定數量的位中時。 我們需要狀態暫存器做什麼? 答案 狀態暫存器儲存標誌,跟蹤總和的結果,這有助於我們瞭解結果中何時出現錯誤並相應地進行更正。 說出狀態暫存器中的三個標誌。 答案 溢位、進位、負數、零。 顯示以下總和的狀態暫存器。 1001 (-7)
+1001 (-7)
----
(1)0010 (+2)
答案 狀態暫存器:Z = False | C = True | N = False | O = True | P = Odd |