給定以IEEE-754單精度格式表示的任意數字(在某些語言/平臺中通常稱爲float
),我可以確定數字也可以用雙精度格式精確表示嗎?是否所有單精度數字都可用雙精度格式表示?
如果是這樣,當考慮半精度到單精度和雙精度到四倍精度時,該屬性是否有效?
給定以IEEE-754單精度格式表示的任意數字(在某些語言/平臺中通常稱爲float
),我可以確定數字也可以用雙精度格式精確表示嗎?是否所有單精度數字都可用雙精度格式表示?
如果是這樣,當考慮半精度到單精度和雙精度到四倍精度時,該屬性是否有效?
是的,double可以表示任何浮點數。同樣適用於四倍精度等。
浮點數以1.01b x 2^-1
(在此例中爲0.625)的形式表示。數字的重要組成部分是有效數,它基本上是一個二進制數,小數點通常在第一個數字之後,指數也是。
二進制浮點格式之間唯一的主要區別是每個組件的位數。數字使用的位數越多,每個部分的位數就越多。因此一個32位的「float」可能有1.01000000000000000000000的有效位數,而一個(64位)的「double」將在該點後面有大約50位數字。這意味着任何可以在浮點數中精確表示的數字也都可以用double來精確表示,因爲您的精度都提高了(讀數:更有意義的數字)並且增加了範圍。這與64位整數變量如何保存任何32位整數相似;多餘的位幾乎不用。
當然,由於四捨五入誤差而被切掉的任何位在將其轉換爲雙精度時都不會返回到數字中 - 意味着您的浮點數爲0.3,這是不準確的結果,如0.2999999875或者其他的東西(我不喜歡計算),當你將它轉換成雙精度時,它不會接近0.3,它仍然是0.2999999875。如果你想要更接近的近似值,你需要從頭開始重新計算雙打。
是的。事實上,你可以做出更加強硬的說法:兩個單精度數字的每個都可以精確地以雙精度表示(對於一半以及單或雙或四)。
我的回憶是,單和雙只在分配給尾數/指數的位數上有所不同。但是,我沒有參考,所以這不是一個答案。但+1,這是一個很好的問題。 – kdgregory