当前位置:首页 > 探索

《數學大觀念3數學算什麼?》:2012年摩根大通損失約60億美金,只因交易員動了一個Excel公式

文:麥特・帕克(Matt Parker)

試算表的數學什麼失約式終結

把試算表當成資料庫的另一個限制是,試算表最後是大觀動個會用完的。就跟電腦用三十二位元的念數年摩二進位數字來記錄時間會遇到麻煩一樣,Excel對於一個試算表裡能夠記錄多少列數,學算也有一些障礙。根大

在二○一○年,通損維基解密網站提供給《衛報》和《紐約時報》九萬兩千份洩漏自阿富汗戰爭的億美因交易員實地報告。網站創辦人阿桑奇親自把檔案送到《衛報》在倫敦的數學什麼失約式辦公室,報社記者很快確認了那些檔案似乎是大觀動個真貨,但是念數年摩出乎他們意料之外的是,報告應該一路延續到二○○九年的學算年底,但卻在該年四月戛然而止。根大

是通損的,你猜對了,億美因交易員Excel用一個十六位元的數學什麼失約式數字來記算列數,所以可用的列數有最大值,也就是2^16=65,536。因此,當報社記者在Excel裡打開資料,所有在前65,536筆紀錄之後的資料全都消失了。《紐約時報》的記者凱勒描述了發現這件事的那一場祕密會議,他形容阿桑奇「很自然地一秒變身成辦公室技客,解釋說他們已經撞上了Excel的極限」。

Excel從那之後就擴展到最多可使用2^20=1,048,576列,但還是有個極限!在Excel裡向下捲動,感覺起來像是永遠沒有盡頭,但是如果你往下拖動夠久的話,你最終還是會撞上試算表的結尾。如果你想造訪位於橫列末端的那片空無,我可以確認以最高的捲動速度,大概需時十分鐘。

炸開的試算表

整體來說,使用試算表進行任何類型的重要工作都不是個好主意,試算表是讓錯誤可以暗中孳生蔓延的完美環境。歐洲試算表風險利益小組(是的,這世上有個致力於檢驗試算表出錯時刻的真實組織)估計在所有試算表中,有超過百分之九十包含有錯誤。在使用公式的試算表裡,大約百分之二十四在運算過程包含有一個直接的數學錯誤。

他們竟能得到如此明確的百分比數字,這是因為偶爾會有整個公司的全部試算表一次外洩的情況發生。赫曼斯博士是台夫特理工大學的助理教授,她在校內主持學校的試算表實驗室。我很喜歡「試算表實驗室」的概念,在這裡排列整齊的是試算表裡的行列,而不是試管架上的試管;需要設定條件的是判斷式,而不是微生物培養箱。她有過一次機會,能夠分析真實世界中曾被尋獲的一個龐大的試算表語料庫。

在二○○一年安隆醜聞案留下的混亂中,聯邦能源管理委員會發表了他們對安隆公司企業內部和背後證據的調查結果,其中包含該公司內部大約五十萬封的電子郵件。公布和醜聞案無關的員工郵件可能有些疑慮,所以現在有一個顧及員工隱私的「消毒」版本可在網上下載。這讓我們能夠一窺員工在這麼大的一間公司裡如何使用電子郵件的奇景,而他們當然也透過電子郵件的附件寄送了大量的試算表。

赫曼斯和她的同事在電子郵件檔案裡搜尋,最後成功匯集了1萬5770份真實世界的試算表,以及6萬8979封和這些試算表有關的電子郵件。這其中當然有一些選樣偏差的問題,因為這些試算表都來自同一家因為劣質財報而接受調查的公司,實在可惜。但這些資料仍然是一幅令人難以置信的快照,讓我們得以知道試算表在真實世界的實際使用方式,也能知道那些附上試算表的電子郵件是如何評價試算表、如何傳送,以及如何更新。以下就是赫曼斯的發現:

  • 試算表的平均檔案大小是113.4 KB。
  • 最大的試算表有驚人的41 MB(我打賭那是一封內嵌音效檔和動圖的生日邀請函。光想像就叫我瑟瑟發抖)。
  • 平均來說,每一個試算表包含有5.1個工作表。
  • 其中一個試算表竟有175個工作表!就連我都覺得太多了,而且這樣會需要SQL。
  • 每個試算表平均有6191個不為空的儲存格,其中1286個是公式(所以有20.8%的儲存格使用公式來計算或搬移資料)。
  • 有6650個試算表(占總數的42.2%)沒有包含任何一條公式。

拜託,那幹嘛要用試算表?

你愈是鑽研這些試算表出錯的原因,事情就愈來愈有趣。其中那6650個沒有公式的試算表基本上只是美化過的純文字文件,單純用來列出數字而已,所以我就不談它們了。我唯一在乎的試算表,是裡頭會進行一些可能會出錯的數學運算的那一種,也就是剩下的那9120個包含有20,277,835條公式的試算表。

在輸入公式這方面,Excel確實有很良好的防錯設計,它會檢查語法是否都正確。在進行一般的電腦程式設計時,你很容易會把一個多餘的括號留在某處,或者忘了擺上一個逗號,像這種事會讓你在半夜三點對著一個分號大聲咒罵(「你在這裡搞什麼?!」),反正我聽說過類似的故事。Excel至少會大致檢查你的每一個標點符號,看它們是不是都遵守規矩。

但是Excel不能確定你使用的函式是否合理,也不能確定你有沒有指向正確的儲存格、餵送正確的資料給函式。在這些情況下,程式還是會執行指令,只有在數學完全出錯的時候才會回傳錯誤訊息。#NUM!的意思是使用者用了錯誤類型的數字資料,#NULL!指的是輸入資料的範圍沒有被正確定義,還有一個是我的最愛,#DIV/0!,對應的是任何意圖除以零的動作。

赫曼斯發現有2,205個試算表具有至少一個Excel錯誤訊息,也就是說,在所有包含函式的試算表中,有大約24%是有錯誤的。而且這些錯誤並不孤單,每一個有語法錯誤傾向的試算表平均包含585.5個錯誤的運算結果。有755個試算表包含數量驚人的錯誤,超過一百個,而贏得冠軍的那個試算表竟有83,273個錯誤。多到這種程度,我感到的其實只有讚嘆。我大概沒辦法一口氣搞出這麼多錯誤來,除非我另外使用一個獨立的試算表來追蹤它們。

但是在所有試算表會有的錯誤裡,這些顯而易見的錯誤只占很小很小的一部分,還有更多的函式錯誤最後根本無人知曉。如果對建立試算表的人原本的意圖缺乏深刻的理解,是沒有輕鬆的方法能夠掃描試算表、確認每一個函式都指到正確的地方。這大概是試算表最大的問題了吧,使用者很容易不小心選錯行,於是資料的年份突然錯亂,或者在要計算淨利的時候卻算成毛利(還真的很毛!)。


分享到:

京ICP备19007577号-5