2011-06-14 34 views
1

我想將一個十進制轉換爲使用32位寄存器的浮點整數。我有手(鉛筆和紙)要做到這一點,到目前爲止我的號碼是浮點截斷vs用手四捨五入

1.11010110111100110100010011(base 2) x 2^26 

現在我知道尾數只能存儲2^23點的叮咬,所以我需要表現出來會是什麼樣使用四捨五入和沒有四捨五入。我的問題是什麼決定四捨五入?我知道截斷會導致此

1.11010110111100110100010(base 2) x 2^23 

並四捨五入只看該位的權利和四捨五入爲1,如果它等於1,下至0,如果它等於一個零?

如果數目是

1.11010110111100110100010111(base 2) x 2^26 where there is a one to the right? 

如果什麼位在2^3是一個1和2^2位(右側)是一個1像在本實施例中

1.11010110111100110100011111(base 2) x 2^26 

謝謝在這個階段,我對於四捨五入有點不清楚。

+1

提示:二進制數的截斷和舍入的工作方式與小數位一樣。 – 2011-06-14 14:28:16

+0

我想我的問題是,當四捨五入時,你只是在四捨五入時從左邊的第24位找到右邊的位。如果它是1,那麼你收起來,如果它是零,那麼離開它?或者你必須仔細觀察其餘位,以確定你是否需要蒐集@Paul R – floatingPointStudent 2011-06-14 14:39:03

+0

@floating:好 - 好點 - 理論上你需要尋找儘可能多的位數「正確「舍入,但實際上大多數硬件實現使用右邊的1或2位來確定是否舍入。 – 2011-06-14 14:41:48

回答

0

二進制數的截斷和舍入的工作方式與小數位的工作方式非常相似。從理論上講,您需要查看盡可能多的位以進行「正確」舍入,但實際上大多數硬件實現在右側使用1或2位來確定是否舍入。

0

舍入通常是對可用的最接近的有效數字進行的。但是,如果該值是這些人恰恰之間,也就是說,如果你想擺脫的最高位爲1,其餘爲0,有幾個所謂的平局決勝規則:

  • 截斷(向0)
  • 向上(向正無窮)
  • 下(向-infinity)
  • 遠離0
  • 銀行家舍(精確到甚至更顯著位)。

應用哪個規則是必須定義的。 AFAIK,大多數FPU使用銀行家舍入作爲默認值。

在我們的例子中,你扔掉3個二進制數字。 000簡單地被截斷; 001-011總是倒下; 101-111總是四捨五入,100則調用打破規則。如果這些規則的結果是四捨五入的,則向結果添加一個最低有效位,並且如果需要,則相應地移位。

在你的第一種情況下,只需截斷位,因爲它們低於100,但如果這是值

1.11010110111100110100011111 

,並要刪除3位,首先截斷爲

1.11010110111100110100011 

而是因爲你扔位遠是111,你圍捕,所以你加1位,併成爲

1.11010110111100110100100 

IOW,最低位011成爲100