程式語言的高精度計算/浮點數計算的問題,以 0.58 * 100 為例

SafeMath

程式語言精度計算/浮點數計算的問題早已不是都市傳說,問題出在某些浮點數無法準確地使用二進制表示,所造成的「錯誤」。但每次聽到或見到年輕軟體工程師因此踩坑,也還是會捏出一把冷汗,倘若是發生在對數字極度敏感的場景,是難以收復的。

常理來說,0.58 x 100 應為 58,但在某些程式語言裡,在不進行「特殊」處理下,答案會為 57 而非 58。

本文嘗試整理各程式語言遇到此類計算時的結果,而解法不外乎就是『使用支援高精度的函式來處理』,目前各程式語言都有對應的解法,此不詳述。