2013-01-08 88 views
3

可能重複:
Real numbers - how to determine whether float or double is required?如何判斷雙精度浮點數是否可以安全地存儲爲單精度浮點數?

我想檢查是否從雙浮動轉換將導致精度損失。很顯然,我可以進行轉換並將float重新轉換爲double並將其與原始值進行比較。我很好奇是否有更直接的方法。

+0

相關:http://stackoverflow.com/questions/11772776/how-are-double-precision-floating-point-numbers-converted-to-single-precision-fl – NominSim

+0

答案在這裏,如果你這樣做有點數學問題:http://stackoverflow.com/questions/5098558/float-vs-double-precision –

+0

請澄清。什麼是安全的?你總是失去一點點;你是否認爲丟失位是安全的,當且僅當它們都被設置爲0? – MSalters

回答

8

轉換爲浮動和返回通常是最有效的解決方案;在大多數常見的體系結構中,它只需要幾條指令,延遲時間爲幾個週期。這也有簡單和正確的美德。

在沒有硬件支持浮點的平臺上,可以通過拆分數字並檢查指數和有效值是否適合單精度來更有效地進行檢查,但這是一個相對不常見的角落這種情況更容易出錯,不能移植到使用不同FP格式的平臺上。

0

浮點數有兩部分,尾數和指數。一個double有更多的位分配給這兩個部分。分配一個雙精度浮點數將會減少尾數位,這會給你更少的精度數字,這是可以預料的。但是,如果雙指數不適合float指數,那麼float將是一個垃圾值。

+3

「如果雙指數不適合float指數,那麼float將是一個垃圾值」轉換爲float「一個雙指數太低的代表應該給0(或者一個subnormal if有效位的某些位仍然可以用「float」低於正常值表示)。轉換一個指數太高的'double'應該給+ inf或-inf。 –

+0

從來不知道。謝謝! –