在Linux x86_64上的C++代碼中,我需要雙精度計算(+或 - )。如何控制雙精度計算以避免C++ linux x86_64中的舍入錯誤?
26.100000000000001 - 26 + 0.10000000000000001
我:
0.20000000000000143
我想0.2。
這裏,顯示格式不導入,計算結果將用於一些if-else分支條件。所以,我只希望if-else條件比較小數位後的4位數。
這似乎是一個舍入誤差?
如何限制小數點後的計算精度爲4位數?
我不想調用任何函數以避免開銷。
由於轉換開銷,我不想使用stringstream。
有什麼更好的點子?
感謝
,顯示格式不是導入,計算結果將用於一些if-else分支條件。所以,我只希望if-else條件比較小數位後的4位數。 – user1002288 2011-12-25 18:53:37
@ user1002288您想要做的事情對於二進制浮點不可行。沒有任何舍入黑客會像魔術一樣在二進制浮點工作上進行小數運算。 – Mysticial 2011-12-25 18:55:57
@ user1002288您可以爲所有浮點精度比較添加一些魔法'epsilon'值。像'if(a == b){}'轉換成if(abs(a-b)<1e-4){}'。這是使用浮點算術可以做的最好的事情。 – aland 2011-12-25 19:00:26