一隻天價股票致納斯達克系統“崩了”!

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"伯克希爾 - 哈撒韋公司最近又火了一把,不是因爲股神巴菲特(公司掌門人),而是其天價股票導致納斯達克系統“崩了”。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"天價股票"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"據美國廣播公司 8 日報道,伯克希爾 - 哈撒韋 A 類股票(BRK.A)的交易價格目前已超過每股 42.1 萬美元,並呈現上升趨勢,5 月 7 日攀升至 43.7 萬美元上方。這個消息雖然令投資者士氣高漲,但是卻給納斯達克的系統帶來了隱患。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/96\/96e708cda7132663b4eee38812a7a873.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由於 BRK.A 的股價過高,以至於納斯達克的電腦系統已經無法記錄這一價格。因此,納斯達克交易所從本週二開始暫停播報 BRK.A 的價格——其網站相關頁面中僅顯示:“當前無可用數據”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,IEX 交易所於 3 月中旬決定停止接收 BRK.A 交易單,理由是“受我方交易系統內部價格數值上限的影響,我們將拒絕一切以原有符號格式表示的交易單,直至另行通知”。看起來,他們似乎遇上了與納斯達克一樣的問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"針對此事,有網友評論:股價太高,以至於納斯達克的系統無法報出這個價格,不得不爲這隻全世界獨一無二的股票升級系統... 就像當年的千年蟲問題,都是因爲“硬編碼”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"硬編碼(Hard Code 或 Hard Coding)是指在軟件實現上,將輸出或輸入的相關參數(例如:路徑、輸出的形式或格式)直接以常量的方式撰寫在源代碼中,而非在運行期間由外界指定的設置、資源、資料或格式做出適當迴應。一般被認定是種反模式或不完美的實現,因爲軟件受到輸入資料或輸出格式的改變就必須修改源代碼,對客戶而言,改變源代碼之外的小設置也許還比較容易。"}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Bug出在哪?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"受到市場上漲和 2020 年疫情影響後恢復盈利的推動,沃倫·巴菲特的公司股票價格今年已經上漲了 20% 以上。但是,天價股票卻讓納斯達克的交易系統撐不住了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"據瞭解,納斯達克一直用一種緊湊的計算機格式記錄股票價格,這種格式使用 32 位,即 1 和 0。最大的數字可能是 2 的 32 次方減去 1,即 4,294,967,295。股票價格經常使用小數點後四位來表示,所以能顯示的最高價格是 429,496.7295 美元。使用佔用內存較少的緊湊格式可以讓軟件更有效率,這在電子股票交易領域是一個高度優先事項。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"沒有其他股票能接近 BRK.A 的最高價格水平,所以可以理解爲什麼納斯達克系統背後的工程師選擇了這種數字格式,程序員稱之爲“四字節無符號整數”( four-byte unsigned integer )。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"據 The Register 分析,納斯達克之所以沒有選擇其他交易所常用的浮點數格式進行股價存儲,可能是考慮到後者屬於近似值,因此,他們決定將價格乘以 10000 再存儲爲 32 位無符號整數。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"例如,這裏的 123,456 代表股票價格爲 12.3456 美元,可以精確至一美分的百分之一。值爲 7890000 美元的股價,其實際含義則爲 789.0000 美元。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"順着這個思路,可以看到伯克希爾·哈撒韋 A 類(BRK.A)單股 435120.0000 美元的價格會被存儲爲 4351200000,超出了 4294967295 的上限並溢出爲某個遠低於實際股價的值。實際上,股價經歷了一番歸零迴繞,並最終被計爲 56232704,即 5623.2704 美元。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個價格一旦被納斯達克公開發布,伯克希爾·哈撒韋絕對要遭受重創。換句話說,我們將能以低於 6000 美元的單股價格狂收公司股票……或者說,我們自己手裏的股票也可能被他人迅猛“收割”。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"應對舉措"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"目前,納斯達克方面表示將搶在 5 月 17 日前更新軟件以糾正這一問題,並第一時間叫停了 BRK.A 異常數據的發佈。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可行的解決方案包括使用 64 位無符號整數,這樣可以處理最大爲 18,446,744,073,709,551,615 的數值,相當於每股價格 1,844,674,407,370,955.1615 美元。目前來看,應該不會有哪支股票能漲到這樣的程度。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"據悉,現年 90 歲的巴菲特堅持不因股價高漲而拆分手中的 A 類股票,伯克希爾·哈撒韋如此誇張的股價也正源於此。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"順帶一提,BRK 正好是 6502 CPU 彙編代碼中的斷點助記符,可用於對出錯的程序進行故障排查……這多少有點諷刺。"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章