
沒有認識在銀行做IT的人, 也不了解銀行的電腦系統使用何種 浮點運算精度 (FLOATING POINT EXPRESSION), 究竟精確到小數後多少位數, 但是一個相當有疑問的問題產生了.某某收到定期存款的通知單, 據說銀行已經把本金和利息都存到她的戶口, 但疑問是, 為什麼小數後的兩位, 就是元角分以後都沒有, 銀行真的算的那麼準確嗎? 這樣的問題, 確實引起一些詢問的興趣. 記得好多年前, 有個銀行的 PROGRAMMER, 把所有存戶的戶口裡存款的小數部份, 利用程序轉到自己的戶口, 結果被一個阿婆到櫃檯查詢戳破, 最後被判刑.這裡先了解看看, 到底定期存款的通知單的數字如何得來, 相信很多人都有定期存款, 但極少數會真正去算到底銀行的利息有沒有少給. 如果當事人的資料正確, 銀行實際所給出的利息, 比較依公式計算所得少了0.75分, 這是14天定存13萬港幣, 年利率2.5%. 正因為是0.75分, 不到HK$0.01, 所以銀行採用所謂的 ROUNDDOWN 小數後兩位, 就是只支付 HK$124.65, 而並非公式所得的HK$124.6575342. 如果說是因為電腦系統的關係產生這樣的誤差, 那麼 IEEE 所規定的有效浮點運算精度就沒有被採用, 看來這樣的銀行電腦系統要更換, 因為這是很難讓行內人接納的解釋, 理由不夠充分, 原因是 PC + EXCEL 都做得到. 再來看看不同的本金數目, 會在 ROUNDDOWN 的情形產生什麼差別, 主要是了解一下, 銀行這樣的操作所產生的誤差. 本金由HK$1,000 到 HK$1,000,000, 依照數量級遞增 (1,000 - 9,000, 10,000 - 90,000 等), 但是特別加入 13萬到19萬的級數, 方便觀察. 仍然用14天定存, 年利率2.5%, 但是銀行給出50萬以上的年利率2.75%. 表中計算了單筆本金計算利息時 ROUNDDOWN 出現的差別. 全港700萬人口, 假設每天都由1000筆這樣的存款到期, 銀行所支出的利息和實際計算的差額就會有1000x 的差別. 一堆數字比較難以觀察, 依以下的數字, 繪製成圖表方便直觀. 下圖中, 假設每天都由1000筆這樣的存款到期, 銀行所支出的利息和實際計算的總差額以粉紅色表示, 定存本金以黑色表示. 看看如何理解這個圖表比如說, 本金HK$1000, 銀行會少付 HK$8.9, 隨著本金數目加大, 銀行少付的數目會減少. 到本金HK$9000, 銀行會少付 HK$0.13左右