2015-09-02 116 views
1

我試圖將一個大整數轉換爲32位單精度浮點數,但我無法克服我遇到的這個問題。如果大整數的二進制表示大於23位尾數,該怎麼辦?大整數到單點浮點數

例如,取整數1671277287

它的二進制表示01100011100111011010101011100111

我的理解是,你向左移動小數點的位置,直到只有1位的是像這樣左:

01.100011100111011010101011100111

我的問題是,這個尾數是30位,一個精度浮點只有23位尾數的空間。我試圖尋找這個具體的問題,但我還沒有找到任何東西。我將如何解決這個問題?

編輯:發現了一些信息,以防萬一別人有這個問題。單精度浮點的默認舍入是「舍入到最近,與偶數關係」。另一個StackOverflow發表評論如何輕鬆地做到這一點。

StackOverflow post regarding rounding

+1

您不會錯過任何東西 - 一個32位單精度浮點數具有精度較少顯著數字(6 - 7位十進制數)而不是32位整數,因爲它只有23位尾數。因此,在您的示例中,那些最不重要的位將突出顯示「結束」。 –

+1

請注意,假設IEEE754,由於隱含的前導1,你有24位。但是,這仍然不會產生30位,所以要做到這一點是適當的四捨五入 - 這就是w.r.t. IEEE754舍入模式有效,默認舍入到最近,平均值。 –

+0

@PaulR所以30位尾數「100011100111011010101011100111」就是「10001110011101101010101」,最右邊的7位保持關閉狀態? –

回答

1

這個問題相當於是如何圓1000_1110_0111_0110_1010_1011_1001_11 23位。我將採用通常的默認舍入模式,這個模式是一輪到最接近的,甚至可以作爲平局。

最重要的23位是1000_1110_0111_0110_1010_101。最顯着的丟棄位是1,並且具有較低的顯着性非零位。

的一般規則是:

  • 如果第一個下降位爲0本輪下跌。
  • 如果第一個丟失的位是1並且較低的有效位全部爲零,則舍入爲偶數。
  • 如果第一個被丟棄的位是1,並且存在較低的重要性非零位,則向上舍入。

這些規則的第三適用於這裏,所以你應該四捨五入到1000_1110_0111_0110_1010_110