第469章 0.1+0.2≠0.3(第3頁)

    顧凡趕忙打開電腦,嘗試著搜索了一番,很快就定位到了罪魁禍首——諸葛君發佈的那個視頻。

    在視頻中,諸葛君把這個bug的復現方式給詳細地講述了一番。

    這很快在玩家群體中引發了軒然大波,很快,玩家們群策群力,不僅驗證了這個bug的真實性,還在此基礎上做好了成神結局的全部路線規劃。

    也有up主已經在著手製作用這種方式最快打出成神結局的視頻攻略。

    而一旦視頻攻略做出來,玩家們打出成神結局的難度必然大大降低!

    這對於莉莉絲來說,簡直不啻於驚天噩耗!

    “為什麼會出現這樣奇怪的bug!!

    “顧凡,給我查!給我狠狠地查!”

    莉莉絲很憤怒,她完全無法理解這到底是怎麼回事。

    不過這次,顧凡壓根都沒去翻代碼,而是立刻就給出了大致的判斷。

    “這看起來……大概率是浮點數誤差導致的經典Bug,也就是int型和浮點型運算的轉化出現了一些小紕漏。

    “動態難度恰好生成了一個特殊的分數,在系統刷新時,分數卡在臨界點,變成了一個系統無法正確識別的數據,從而產生了錯誤的應答,遊戲的動態難度就自動降為了最低難度。”

    莉莉絲聽得一頭霧水:“……你說人話!”

    顧凡輕咳兩聲:“好吧,那我換更加通俗的方式來解釋。

    “不過在此之前,我覺得有必要給莉總你科普一下一些程序的基礎知識,否則就算我說破天,你也不會理解為什麼出現了小數就會有這種離譜的bug。

    “首先,莉總你知不知道在程序裡面,0.1+0.2≠0.3?”

    莉莉絲有些震驚地張大嘴巴:“為、為什麼?”

    顧凡解釋道:“在現實中0.1+0.2當然是等於0.3的,但在程序裡不是,因為程序是二進制的。我們想要把十進制轉化成二進制,需要用到‘除2取餘法’,也就是說,把十進制的8轉化成二進制,那麼就需要除四次2,餘數分別是0、0、0、1,那麼最終轉化出來的二進制結果,就是1000。

    “但這是整數的轉換,當遇到負數、小數的時候,情況又會有一些區別。

    “這裡我就不展開講了,總之,想要將十進制的小數轉化為二進制,就需要用到‘乘二取整法’,我們先把整數部分十進制轉二進制,再把小數部分十進制轉二進制,最後再把兩個二進制數字的結果進行合併,就得到了一個小數在二進制下的數字。

    “但這裡有個問題,那就是隻有極少數的小數可以通過乘二取整法來完整地轉化,還有大量的數字在轉化成二進制之後,是無限循環的。

    “就比如,十進制的0.1在轉化成二進制之後,會變成0.0001100110……而由於計算機的資源是有限的,我們不能直接記錄這一長串的數字,就只能記錄一個最大化接近0.1的二進制數,這就會造成精度缺失的情況。”

    顧凡一邊說著,一邊在電腦上快速地運算,幫助莉莉絲理解。

    而莉莉絲則是眉頭緊鎖,顯然大腦已經處於過載狀態,但在顧凡一步一停的耐心解釋下,倒是也勉強理解了七七八八。

    (本章完)