Google Bug!這是一個因為程式錯誤臭蟲毀滅地球的故事

先前筆者在介紹電腦臭蟲(Bug)的文章中,提到 Google 計算機服務也存在不少程式臭蟲。經過分析演算後,該臭蟲的存在可以具體定義為「333 333 333 333 335」。

所謂臭蟲指的是潛藏在電腦程式碼裡頭的錯誤存在,定義是:「程式錯誤(英語:Bug),在程式設計中的術語,是指在軟體運行中因為程式本身有錯誤而造成的功能不正常、死機、數據丟失、非正常中斷等現象。」。

筆者在 Google 搜尋頁面裡,藉由中值分析的逐一推算,將「333333333333335–333333333333333 = 2」 這組神奇數字給找出來。這組看似毫無異狀的算式,如果進一步演算,就會發現「333333333333335 – 333333333333334」這則簡單的數學運算,只要有眼睛的人一看,都能馬上知道正確答案會是 1,但是 Google 計算出的答案卻偏偏是 0

如果改用微軟 Windows XP 內附的小算盤進行計算,就能得到正確解答為「1」。即便繼續將數值提高到小算盤的最大數值:「99999999999999999999999999999999 – 99999999999999999999999999999998」,依然可以計算出正確解答為「1」。

筆者私下歸納出一個結論:「Google 伺服器的程式設計,比不上一個微軟小算盤」。(笑)

起碼筆者從這個臭蟲沒看見 Google 想要修正錯誤的決心,這個臭蟲似乎在 Google 伺服器裡頭一待就是數年之久。

接著,我們用大量數值代入計算,對 Google 計算機進行反應分析,看看最後是否能由關聯性中,尋找到臭蟲的一點蛛絲馬跡。

  • 「399999999999995–399999999999994 = 0」
  • 「1000000000000005–1000000000000002 = 0」
  • 「1333333333333335–1333333333333334 = 0」
  • 「2000000000000009–2000000000000003 = 0」
  • 「3000000000000009–3000000000000001 = 0」
  • 「9999999999999999999999999999999–9999999999999969799548763635712 = 0」

由上面所列各項數據列可以看出當計算數值越大,運算誤差越大,顯見 Google 計算機發生運算錯誤的情況,並非只有單純的「333333333333335 – 333333333333335 = 0」,或是「N-(N-1)=0」(設 N 為大於「333333333333335」之數的代數符號)等情況。

同時,透過單一的減法運算,也說明了這隻臭蟲不是邏輯上的設計錯誤(例如先加減後乘除的順序問題),至於筆者認為的可能原因會在下面文章再做細節說明。

雖然 Google 的臭蟲看似只是個小問題,但是只要機率有存在性,依然可能引發極為嚴重,甚至牽扯到生命安全的事件,而且比起蝴蝶效應來得更加直接。

下面舉幾個虛擬的情境實施例讓大家看看,為何筆者會認為 Google 的這隻計算機臭蟲非常危險。

一位正在某國尖端實驗室進行研究的天才科學家,由於常用的工程計算機的電池恰巧耗盡,他的電腦又恰巧開著網路瀏覽器,網路瀏覽器的頁面恰巧是 Google 首頁,這位天才科學家恰巧用過 Google 計算機運算過一些數學式。

於是,這位天才科學家一時懶得去買電池,便順手用 Google 計算機進行一系列的長運算。

可是天才科學家不曉得筆者今天介紹的這隻 Google Bug,當運算完畢後,由最先的只差 1,到最後卻讓核能電廠的臨界值被高估了一倍。而後面引用該數據的工程師恰巧又未加以反覆驗證,便順手將核電廠蓋好。接著,腦殘的政府高層人士到了核電廠前開開心心的剪綵,風光一時,受到百姓愛戴。

只可惜,在核電廠剛啟用沒多久,便因為核反應超出臨界值,發生一場極為嚴重的爆炸,於是高層人士帶著妻小搭上專機尋求國外庇護,百姓們把碘片當糖果吞,開始一場好萊塢式的小人物末日狂想曲(好像有點偏激)。

第二個虛擬情境例。

雖然太平洋上北方的某一個小島國已經毀滅,讓全世界新聞社瘋狂報導並且荷包賺飽飽,但是天才科學家還是沒發現是因為自己遇到 Google Bug 導致的計算錯誤造成的。

某一天,天才科學家(對,還是同一位)接到軍隊方面的請託,設計一款 M2000GX 高能量長射程光束砲的路徑修正程式。這位科學家恰巧還沒去買工程計算機的電池,恰巧科學家的首頁設定自從安裝 Chrome 而被強迫設定後,一直都是 Google 搜尋頁面,而科學家恰巧又需要計算一個數學式,於是乎,科學家又用了 Google 計算機進行運算。

你知道電影都是如何演的,軍方工程師在這時候一定又恰巧沒有進行驗證,便順利的將 M2000GX 高能量長射程光束砲進行生產製造。不過這次沒有高層人士想承認自己的國家做了這根砲管,所以沒有安排剪綵活動。

自從該根經由天才科學家加持的光束砲孵出來後,一直安穩的躺在某個沙漠秘密基地裡,據傳聞旁邊還有幾座魔山,常常有學生或軍隊在山裡神秘失蹤。

在又某一天,U 國終於對 A 國政府的邪惡暴行無法再加以忍受(其實是 A 國反抗軍已經沒錢再跟 U 國買武器)。於是 U 國決定是時候啟動光速炮完全殲滅該地區,以維護該全球的和平,實現世界警察的正義。

只可惜,當光束炮發射出去後不久,便因為瞄準目標用的路徑修正程式的計算錯誤(對,恰巧就是天才科學家加持過的路徑修正),由最初的只差 1,到最後導致原本該往南修正的高能光速,卻朝相反方向前進,並恰巧在 R 國本土掉了下來,轟隆一聲。

受到 U 國武力攻擊的 R 國也不是吃素的,理所當然不能就這樣吞下這口氣,於是 R 國當局決定立刻予以反擊,不僅將原本收了錢,已運往 A 國的武器全部強制招回外,還啟動境內全部武器,朝 ApU 國本土一齊發射,冀求迅速用最強大武力,一次完全毀滅 U 國的反擊能力。

但是 U 國的空中預警系統早就秘密的佈局全球,R 國當然不曉得,於是在全球鵰的偵測下,U 國已經發現 R 國的反擊行動,於是 U 國亦決定同步實施全武器反擊。

接著,下一幕就是所有原始目標被完美的擊中,而在國際太空站的太空人們在宇宙中,親眼目睹地球上最美麗的一刻。

就在天才科學家還在納悶,為何光束炮會射徧的同時,天才科學家已經與地球一同就被炸成兩半,全人類宣告滅亡。(好像更偏激了)。

Google 計算機的臭蟲問題,反映出即便是身為 Google 的程式設計團隊,擁有全球最高學歷與最高智商的菁英聚合體,依舊無法跳脫最基本人性錯誤的一個事實:「只要是人為設計,必定存在缺陷。」這也難怪魔鬼阿諾的老大「天網」能夠毀滅人類(喂)。

好了,既然地球已經都被那位天才科學家毀滅了(兩次),我們再來談談 Google 為何至今仍不解決這隻臭蟲問題。

筆者個人認為(先聲明,我不會寫程式,也沒有進行任何調查研究,純粹憑邏輯推測)其中的原因之一或在於,Google 設計的資料庫系統及其中收錄以天文數字計的數據資料,採用一種特殊格式加以儲存,而搜尋框用來擷取字串也是使用相同的格式,這樣的對等式設計可以達到高處理效率的優點,但是最初的程式設計師卻忽略「333333333333335」或「N」等數值在被擷取並轉換後,會造成格式上的溢位或是不足等問題,進而形成計算上的錯誤結果;也因此,Google 之所以不修正錯誤,便是因為這將是牽動到整個資料庫轉換的超大工程,所以他們寧可無視這隻只有在附加功能上出現的臭蟲。

又或者,Google 覺得這樣很有趣(請看前揭情境一或二)。

分享您的想法

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *