舍入誤差不僅引發(fā)了金融界的烏龍事件,還曾造成美軍重大傷亡。海灣戰(zhàn)爭(zhēng)期間,在沙特的愛國(guó)者導(dǎo)彈的計(jì)算機(jī)運(yùn)行100個(gè)小時(shí)后,系統(tǒng)累積了0.3422秒的誤差,最終沒能攔截伊拉克發(fā)射的一枚導(dǎo)彈,造成28名美國(guó)陸軍士兵死亡。
銀行利息讓你賺了還是虧了?
舉一個(gè)例子,銀行給5個(gè)儲(chǔ)戶的利息分別是0、0.001、0.002、0.003、0.004,四舍五入后,銀行賺了。但是另外5個(gè)儲(chǔ)戶的利息是0.005、0.006、0.007、0.008、0.009,那么他們每人拿到的利息就是0.01,銀行虧了。
根據(jù)物理學(xué)家弗蘭克·本福德測(cè)算,0至9這10個(gè)數(shù)字出現(xiàn)的概率相同。那么每付出10筆利息,銀行的總收益就是:0+0.001+0.002+0.003+0.004-0.005-0.004-0.003-0.002-0.001=-0.005也就是說,四舍五入其實(shí)不利于銀行,而有利于儲(chǔ)戶。
為了減小誤差,有人設(shè)計(jì)出了“銀行家舍入法”。規(guī)則是這樣的:4及以下直接舍去;大于等于6時(shí),進(jìn)位后舍去;如果5后面還有數(shù)字,則進(jìn)位后舍去;如果5后面沒有數(shù)字了,那么如果5前面是奇數(shù),則進(jìn)1,若5前面是偶數(shù)直接舍去5。當(dāng)然,“銀行家舍入法”也不是完全沒有誤差。
我國(guó)金融系統(tǒng)的大部分算法是用四舍五入。國(guó)際上,歐盟委員會(huì)對(duì)換匯時(shí)的舍入規(guī)定也是四舍五入。真正廣泛采用“銀行家舍入法”的是需要更小誤差的科學(xué)和計(jì)算機(jī)系統(tǒng),現(xiàn)在大部分編程軟件的默認(rèn)設(shè)置都是“銀行家舍入法”。
曾造成美軍重大傷亡
歷史上,舍入誤差曾引發(fā)了烏龍事件。1982年,加拿大推出了溫哥華證券交易所指數(shù)VSEI。VSEI是1500家上市公司的指數(shù)合成所得,用來衡量股市的整體走勢(shì)。
VSEI的初始值是1000點(diǎn)。但是1983年11月,VSEI跌到了524.811點(diǎn),但構(gòu)成VSEI的幾個(gè)股票本身并沒有跌很多。原來,VSEI的計(jì)算由計(jì)算機(jī)程序自動(dòng)處理,計(jì)算到小數(shù)點(diǎn)后第4位,但是報(bào)告中最后一位被四舍五入去掉了。因此,每次計(jì)算,VSEI就出現(xiàn)了一個(gè)很小的誤差。而等到1983年11月,這個(gè)誤差已經(jīng)肉眼可見了。
舍入誤差還曾造成美軍重大傷亡。海灣戰(zhàn)爭(zhēng)期間,在沙特的愛國(guó)者導(dǎo)彈的計(jì)算機(jī)運(yùn)行100個(gè)小時(shí)后,系統(tǒng)累積了0.3422秒的誤差,最終沒能攔截伊拉克發(fā)射的一枚飛毛腿導(dǎo)彈,造成28名美國(guó)陸軍士兵死亡。
有人利用誤差賺錢
日常金融操作的最小單位是分,在匯率換算的時(shí)候也是如此,有人曾利用這個(gè)誤差賺錢。舉一個(gè)例子:0.01日元換成美元是0.000093美元,銀行不可能把你的錢換沒了,所以只能給你0.01美元,如果循環(huán)多次交易,就能利用誤差套利。
2013年,羅馬尼亞計(jì)算機(jī)安全學(xué)家阿德里安設(shè)計(jì)了一款自動(dòng)賺錢機(jī)器,在歐元換算成羅馬尼亞的貨幣的過程中,利用四舍五入來套利。如果全速運(yùn)轉(zhuǎn),這臺(tái)機(jī)器每天能通過數(shù)千次小額交易賺到70歐元。
銀行把這種套利行為取名為“邏輯攻擊”。當(dāng)然,銀行也有應(yīng)對(duì)措施,比如收取交易費(fèi)、設(shè)定最小換匯數(shù)額,或者限制每日換匯次數(shù)等。“邏輯攻擊”也適用于稅務(wù)系統(tǒng),如一家公司可以利用多次四舍五入而少交稅。為了避免有人利用這個(gè)漏洞,美國(guó)國(guó)家稅務(wù)局就設(shè)定了相應(yīng)的規(guī)定,使公司在報(bào)稅時(shí)沒有漏洞可鉆。
(新華網(wǎng)等)