七君
大家在小學(xué)就會(huì)四舍五入,四及以下被舍去,五以及更大的數(shù)字則進(jìn)1。
這個(gè)規(guī)則在做題的時(shí)候沒(méi)有什么問(wèn)題,畢竟做錯(cuò)做對(duì)也不會(huì)來(lái)錢(qián)。那么問(wèn)題來(lái)了,銀行交易的最小單位是分,分以下被約掉的錢(qián)雖然不多,但是如果按照我們小學(xué)的四舍五入,你和銀行到底誰(shuí)虧誰(shuí)賺呢?
舉個(gè)例子,比如給5位儲(chǔ)戶的利息分別是0.000元、0.001元、0.002元、0.003元、0.004元,這些厘被四舍五入掉了,因此銀行賺了。
但是另外五位儲(chǔ)戶的利息是0.005元、0.006元、0.007元、0.008元、0.009元,那么他們每人拿到的利息就是0.01元,銀行虧了。

四舍五入過(guò)山車(chē)
而根據(jù)本福德定律的發(fā)現(xiàn)者弗蘭克·本福德的測(cè)算(本福特定律,也稱(chēng)為本福德法則,從實(shí)際生活得出的數(shù)據(jù)中,以1為首位數(shù)字的數(shù)的出現(xiàn)幾率約為總數(shù)的三成,接近期望值1/9的3倍。推廣來(lái)說(shuō),越大的數(shù),以它為首位的數(shù)出現(xiàn)的幾率就越低。它可用于檢查各種數(shù)據(jù)是否有造假),非第一位的數(shù)基本上符合隨機(jī)分布,也就是0-9這10個(gè)數(shù)字出現(xiàn)的概率相同。那么每付出10筆利息,銀行的總收益就是:
0.000+0.001+0.002+0.003+0.004-0.005-0.004-0.003-0.002-0.001=-0.005
看到了吧,妥妥的虧錢(qián)。這還只是付10筆利息的情況,銀行有上百萬(wàn)上千萬(wàn)的儲(chǔ)戶,那么虧損就更大了,每千萬(wàn)筆利息,銀行要虧五千元。
也就是說(shuō),四舍五入其實(shí)不利于銀行,而有利于儲(chǔ)戶。
話說(shuō)回來(lái),傳統(tǒng)的四舍五入讓銀行虧錢(qián)的原因是因?yàn)榘?都往大了算。為了減小誤差,有人設(shè)計(jì)出了一種叫做銀行家舍入(Bankers Rounding)的算法。它的規(guī)則是這樣的:
* 4及以下直接舍去;大于等于6時(shí),進(jìn)位后舍去;這兩點(diǎn)和四舍五入一樣;
* 5的情況比較復(fù)雜,如果5后面還有數(shù)字,則進(jìn)位后舍去;如果5后面沒(méi)有數(shù)字了,那么5前面是奇數(shù),則進(jìn)1,若5前面是偶數(shù)直接舍去5。
舉幾個(gè)例子:
3.016 ≈ 3.02
3.013 ≈ 3.01
3.015 ≈ 3.02
3.045 ≈ 3.04
3.04501 ≈ 3.05

國(guó)內(nèi)銀行計(jì)算利息時(shí),分位以下四舍五入@張蓮苓《商業(yè)銀行會(huì)
如果數(shù)字隨機(jī)分布,則銀行家舍入引起的誤差比傳統(tǒng)的四舍五入小,因?yàn)殂y行家舍入法在計(jì)算時(shí),平均一半的情況數(shù)會(huì)變大,而另一半會(huì)變小。當(dāng)然,銀行家舍入也不是完全沒(méi)有誤差,其誤差和操作次數(shù)的平方根成正比。
不過(guò)需要指出的是,雖然這種舍入法叫“銀行家舍入”,但實(shí)際上和銀行關(guān)系不大。
我國(guó)金融系統(tǒng)的大部分算法就是用四舍五入。比如分以下的利息、中國(guó)國(guó)際收支平衡表、商業(yè)銀行向中國(guó)人民銀行繳存的準(zhǔn)備金、《中華人民共和國(guó)外資金融機(jī)構(gòu)管理?xiàng)l例》中的儲(chǔ)備金等都是用的四舍五入。
國(guó)際上,歐盟委員會(huì)對(duì)換匯時(shí)的舍入規(guī)定也是四舍五入。
真正廣泛采用銀行家舍入法的,是需要更小誤差的科學(xué)和計(jì)算機(jī)系統(tǒng),因此銀行家舍入也常常叫做統(tǒng)計(jì)學(xué)家舍入(statisticians rounding)、無(wú)偏舍入(unbiased rounding)。
1940年開(kāi)始,美國(guó)材料和試驗(yàn)協(xié)會(huì)(ASTM)用的就是銀行家舍入法。現(xiàn)在大部分編程軟件的默認(rèn)設(shè)置都是銀行家舍入法,比如C/C++、JavaScript、PHP、Go,英特爾處理器用的也是銀行家舍入。

編程中銀行家舍入用得最多
不過(guò),不管是四舍五入還是各種花式舍入法,都無(wú)法避免誤差累積的問(wèn)題。我們來(lái)看看幾個(gè)舍入引起的超級(jí)烏龍事件。
1982年,加拿大推出了溫哥華證券交易所指數(shù)VSEI。VSEI 是1500家上市公司的指數(shù)合成所得,類(lèi)似于咱們的上證指數(shù),用來(lái)衡量股市的整體走勢(shì)。
VSEI的初始值是1000點(diǎn)。但是1983年11月,VSEI跌到了524.811點(diǎn),和一開(kāi)始相比跌去了近一半。奇怪的是,構(gòu)成VSEI的各個(gè)股票本身并沒(méi)有跌這么慘,所以股指到底怎么了呢?
原來(lái),這就是舍入誤差造成的烏龍。VSEI的計(jì)算交由計(jì)算機(jī)程序自動(dòng)處理,計(jì)算精確到小數(shù)點(diǎn)后4位。但是,報(bào)告中只用小數(shù)點(diǎn)后3位,最后一位是直接被舍掉的。
因此,每次計(jì)算,VSEI的真實(shí)值和報(bào)告值之間就出現(xiàn)了一個(gè)很小但卻逐漸累積的誤差。而到1983年11月,僅僅一年多時(shí)間這個(gè)誤差已經(jīng)壯觀到肉眼可見(jiàn)了。
后來(lái),溫哥華證券交易所的人花了3周的時(shí)間才想明白了重新計(jì)算股指的方法。一夜之間,VSEI就從524.811點(diǎn)跳到了1098.892點(diǎn),想想看這讓買(mǎi)入指數(shù)基金的人有多爽。
舍入誤差不光造成金融界的烏龍,還曾造成美軍重大傷亡。海灣戰(zhàn)爭(zhēng)期間,在沙特的愛(ài)國(guó)者導(dǎo)彈的計(jì)算機(jī)精度為24位,有0.0001%的計(jì)時(shí)誤差。運(yùn)行100小時(shí)后,導(dǎo)彈的計(jì)算機(jī)系統(tǒng)累積了0.3422秒的誤差,最終沒(méi)能攔截伊拉克發(fā)射的一枚飛毛腿導(dǎo)彈,造成28名美國(guó)陸軍士兵死亡。
還有一些人利用舍入的誤差攻擊金融系統(tǒng)賺錢(qián)。
因?yàn)槿粘5慕鹑诓僮鞯淖钚挝皇欠郑簿褪切?shù)點(diǎn)后2位,在匯率換算的時(shí)候也是如此,有人就想到,可以人為使這個(gè)誤差朝使自己有利的方向偏移。

愛(ài)國(guó)者導(dǎo)彈發(fā)射
舉個(gè)例子。0.01日元換成美元是0.000093美元,銀行不可能把你的錢(qián)換沒(méi)了,所以只能給你0.01美元,這樣一來(lái),你就白賺了99.07%。
1分錢(qián)雖然是小錢(qián),但蒼蠅也是肉,如果循環(huán)多次交易,就能利用舍入誤差套利。用100日元換1萬(wàn)次,就能賺99美金。
2013年,羅馬尼亞計(jì)算機(jī)安全學(xué)家阿德里安·富圖納(Adrian Furtuna) 發(fā)現(xiàn),歐元在換算成羅馬尼亞貨幣列伊的過(guò)程中可以通過(guò)這種方法套利。他就利用外匯舍入的漏洞設(shè)計(jì)了一款自動(dòng)賺錢(qián)機(jī)器。如果能全速運(yùn)轉(zhuǎn),這臺(tái)機(jī)器每天就能通過(guò)數(shù)千次小額交易賺取70歐元。

Adrian Furtuna 制造的用于讀取銀行征信儀器代碼的設(shè)備。@BBC
因?yàn)檫@種交易是在銀行設(shè)置的合法語(yǔ)境下進(jìn)行的,所以銀行只能吃啞巴虧。銀行把這種套利行為取名為“邏輯攻擊”(logical attack)。當(dāng)然,銀行也有應(yīng)對(duì)措施,比如收取交易費(fèi)、設(shè)定最小換匯數(shù)額,或者限制每日換匯次數(shù)等等。

這種對(duì)金融系統(tǒng)的攻擊,就屬于著名的“臘腸術(shù)”——神不知鬼不覺(jué)地把一片片薩拉米切下來(lái),合起來(lái)就是一根完整的臘腸啦。
歷史上的確發(fā)生過(guò)很多次臘腸攻擊的案件,不少影視作品也有相應(yīng)描述,比如1983年的《超人》、1999年的《上班一條蟲(chóng)》。
在《上班一條蟲(chóng)》中,男主利用黑客技術(shù)竄改了銀行的利息算法,把普通儲(chǔ)戶被四舍五入掉的利息全部轉(zhuǎn)到了他的賬戶里。
臘腸攻擊不僅適用于銀行,也適用于稅務(wù)系統(tǒng)。
想想看,如果一家公司有很多員工,把員工交的稅分開(kāi)來(lái)計(jì)算和合起來(lái)計(jì)算的數(shù)額會(huì)因?yàn)樯崛氲膯?wèn)題而略有差異,公司就可以利用多次舍入而少交稅。
為了避免有人利用這個(gè)漏洞,美國(guó)國(guó)家稅務(wù)局就設(shè)定了相應(yīng)的規(guī)定(fractions of cents adjustment),使得公司在報(bào)稅時(shí)沒(méi)有舍入的漏洞可鉆。
總之,只有小學(xué)生會(huì)瞧不起四舍五入,大人都是用它賺錢(qián)養(yǎng)小學(xué)生。
一個(gè)悲傷的悖論:四舍五入有利于儲(chǔ)戶,而我的1分錢(qián)賬戶卻永遠(yuǎn)沒(méi)有利息。
(本文經(jīng)授權(quán)轉(zhuǎn)載自“把科學(xué)帶回家”微信公眾號(hào),有刪節(jié))