2017-09-27 94 views
2

我知道浮點數是不準確的。不過,我的問題是,哪個「下一個」數字的結果是四捨五入的。當「真實」結果無法準確表示時,double/float是如何舍入的?

它是下一個更高的嗎?下一個較低的?它是最接近的嗎?

我的猜測是這是一個尾數會發生什麼問題,但我不確定它是否被截斷,無論它取決於結果是否從「下方」創建(例如總和)或「從上面」(例如差異)。還是更容易,它是純粹的任意,只取決於編譯器/體系結構?

回答

2

這很可能是你的編譯平臺使用IEEE 754

爲基本操作,+, - ,*,/,四捨五入是不可能隨心所欲。 IEEE 754定義了幾個rounding modes。如果您未明確設置默認模式,則會將結果四捨五入爲最接近的可表示值(「舍入到最近,與偶數關聯」)。這就是IEEE 754中關注的細節,規則描述了當結果與兩個候選可表示值相等時,該做什麼。

對於更復雜的函數,例如正弦,它取決於實現。最不準確的實現,甚至可能產生一個結果,是不是任何兩個最接近表示的值到真正的結果!

David Golberg的「每個計算機科學家應該知道什麼是浮點運算」article經常被推薦爲willy-nilly在本網站隨時浮點出現,但在這種情況下,它聽起來像你可能想讀它。

1

這是依賴於實現的,但大多數遵循IEEE 754標準的實現都有選擇幾個舍入選項之一的方法。

默認模式被四捨五入到最接近的表示的數,且在相同的情況下,舍入到偶數(即,一個與所述至少顯著位等於零)。

查看https://en.m.wikipedia.org/wiki/IEEE_754瞭解更多信息。

相關問題