2016-05-09 25 views
0

我有0.1二進制表示:我怎麼圓這個二進制數到最近甚至

0.00011001100110011001100110011001100110011001100110011001100110 

我需要把它四捨五入到最接近的甚至能夠將其存儲在雙精度浮點。我似乎無法理解如何做到這一點。大多數教程都談論守衛,圓形和粘性位 - 它們在這個表示中的位置?

而且我發現瞭如下解釋:

讓我們來看看0.1看起來像雙精度。首先,讓我們寫 以二進制,截斷爲57顯著位:

0.000110011001100110011001100110011001100110011001100110011001… 

位54及以後總要位 53位超過一半的價值,所以這輪長達

0.0001100110011001100110011001100110011001100110011001101 

這個不談GRS位,爲什麼?他們不是總是需要嗎?

回答

1

您引用的文字來自我的文章Why 0.1 Does Not Exist In Floating-Point。在那篇文章中,我展示瞭如何手工完成轉換,而「GRS」位是IEEE實現細節。即使您正在使用計算機進行轉換,您也不必使用IEEE算術(and you shouldn't if you want to do it correctly),因此GRS位也不會在那裏發揮作用。無論如何,GRS位適用於計算,而不是真正的轉換概念。

+0

那麼我如何在沒有GRS位的情況下舍入無限數字? –

+0

我現在也在寫一篇精心撰寫的文章,關於爲什麼0.1 + 0.2在中等不等於0.3,你認爲在完成時你可以看看嗎? –

+0

你應該花點時間做一些關於這個話題的研究(特別是我的網站有很多關於轉換的文章)。另外,你真的在​​找什麼?你想知道如何手工轉換?通過機器?你想了解IEEE算法是如何工作的? –