沒有認識在銀行做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左右
但隨著本金超過一個數量級時 (從9000到10000), 銀行會少付 HK$9左右. 大概如此重複.
重點.....到底這些計算後被 ROUNDDOWN 的錢去了哪裡?

我估銀行會有一個settle account 去處理 trunc 出來的零頭