笑,對此並不在意,問道,“都有些什麼專案?”
廣永元道:“程式設計、破解以及網路滲透。當然,並不一定要全部過關,只要其中一項能夠得到他們的認可就行了。你肯定是沒有問題的,只是走個過場罷了。”
廣永元已經見識過林鴻的破解技術,連《英雄無敵》這樣難啃的骨頭林鴻都三下五除二不費什麼力氣就搞定了,更何況是他們的入門考驗?
這個時候,之前正在玩遊戲的染髮青年已經退出遊戲,他一甩額頭的黃髮對林鴻道:“請吧。”
第一道關卡,程式設計。
林鴻也沒有什麼廢話,坐到了剛剛青年的座位,他看到,顯示器中已經出現了一道題目很顯然,他們對於這種事情已經非常熟悉,擁有了自己一套固定的考驗流程。
給林鴻出的題目為“使用基本運算來編寫一個你所可能實現的效率最高的平方根函式”。
平方根在數學中是一個非常重要同時也非常複雜的運算,在計算機中實現這種函式通常比較困難,所以程式語言一般都會對這些函式進行封裝,程式設計師在程式設計的時候,如果涉及到平方根運算,直接呼叫函式庫中的函式就行了很少有人會懂得底層到底是如何實現的。
而且,能夠實現是一方面,能不能做到運算效率高效又是另外一方面。
程式的執行效率,往往就是高手和菜鳥之間的重要區別,真正的駭客,程式設計的時候,不僅僅只是將功能實現,還會追求最高效率有時候可能只是一個符號的變化,其執行效率便天差地別。
執行一次的區別可能看不出來,可是如果迴圈一千次,一萬次呢?
高手和菜鳥編寫的程式,在效率上往往有著很多倍的差距,要想編寫出高效優雅的程式必須有著對程式語言和計算機底層的本質理解,同時還得擁有豐富的程式設計經驗,在這方面可做不得假實踐是唯一提高自身實力的方式。…;
林鴻知道,求平方根的運算,有一個演算法叫做牛頓迭代法,其原理為:
如果一個數為X,假設它的平方根為Y如果Y的平方和X相差大於某個給定的誤差′就繼續假設下一個值,如此持續下去直到最終得到在允許誤差內的值。
至於如何假設這個值,使用的方式便是取平均值其中必須多次用到除法和乘法。
在計算機中,其本質其實就是加法,整個CPU的運算其實就是一個加法器,當初林鴻實現超腦CPU結構的時候,就是基於一個加法器結構,至於後面的減法、乘法以及除法等運算,都是對在這個加法器的基礎上衍伸而來。
直接使用牛頓迭代法來求平方根,這是普通人的做法,林鴻不用想都知道,如果真的按照這種方式來實現,顯然不能過關。
林鴻略微一思索便有了頭緒,他檢視了一下電腦中的編譯器,發現這臺電腦裡面準備得非常充分,不但有市面上常見的一些程式語言編譯器,如C、BAISC、JAVA、C++等語言,甚至還有一些非常小眾的程式語言,如Ada、Blue、ISP等等。
最終,林鴻還是調出了電腦中的C語言編譯器,直接敲起程式碼來。
霹靂啪啦,僅僅過了二十來秒之後,林鴻便完成了函式的編寫。
他呼叫用函式執行了一下,程式成功執行,沒有任何地錯誤,一次透過。
想了想,他再次刪掉了兩行,將兩個步驟合併成了一個,最終的函式程式碼總數正好為十行。
“好了。”林鴻道。
站在他身後的廣永元此刻還在皺著眉頭看著他的程式。
他想不通,林鴻為什麼這麼編寫。
“這麼快就好了?”染髮青年有些詫異。
剛剛他讓出座位的時候,便從一個角落拿出了一個掌上游戲機玩了起來,可是剛剛才開始玩,便聽到林鴻說已經OK。
這在眾多挑戰者當中,還是頭一回。
染髮青年俯身過去看了一眼,臉上微微一愣,林鴻寫的這十行程式碼,雖然他能看懂大部分,但是還有幾個細節他一時之間也沒弄懂。
他順手將林鴻的這個函式加入時間統計宏,執行一萬次之後,最終顯示出了時間,965毫秒,也就是說,不到一秒鐘。
他用敬服的眼神看著林鴻,說道:“你過關了。我在這裡呆了兩年了,兩年來,從這裡走過的人不下五十人,可是從來沒有一個人做到你這一步,不但結果保證精度,並且執行一萬次的時間不超過一秒。”
林鴻笑笑,對於他的誇讚並沒有