2014-06-21

浮點數精確度所造成的嚴重問題

浮點數與精確度這篇文章中,
有提到浮點數運算可能會造成的錯誤結果,
而這誤差雖然看似很小,卻可能造成嚴重的後果,
甚至有可能會毀了一家銀行。

以一家美國銀行為例,
若該銀行用double型態去儲存金額,
而他們若是沒有仔細謹慎的去處理精確度的問題,
則可能在多次運算後,產生相當嚴重的誤差。
因此千萬不要去小看這看似沒什麼的誤差值,
很有可能會讓你損失大量的金錢。

通常整數型態(如int)就是一個確切的值,
而浮點數型態(如double)就一定會涉及到精確度問題。

以銀行這個例子來看,
通常我們就不該用double去儲存金額,
而是可以用int等整數型態分別去儲存dollar與cent,
就不會產生任何精確度上的問題。
struct MoneyAmount {
    int dollar;
    int cent;
};

沒有留言:

張貼留言