12.微機是啥玩意兒?(第1/2 頁)
只見姚夏在信紙上寫到:
utt_seed(utseed,utt,tn)
{
ti;
set(t,0x00,nsizeof(ut));
for(i=1;i
{
t[i]=t_199332_f(t[i-1]t[i-1](t_199332_w-2))+i;
}
returnt[n-1];
}
……
(前面一大堆宏和結構體定義我就不寫了,大家看著是個意思就行。)
這是用c語言寫的,當前部分是用來編寫隨機數種子函式。
時隔這麼多年,姚夏沒有想到居然還會有用手寫程式碼的時候。
要知道從當年做完華為和鵝廠的筆試題之後,姚夏就沒有這麼幹過了。
沒有開發工具,手寫程式碼真的很麻煩。
姚夏用了兩頁信紙,詳細描述了梅森旋轉隨機數生成演算法。
為什麼選擇梅森旋轉,主要是基於幾個方面的原因。
首先,現在是1986年,距離1999年的tel在其i810晶片組上整合了晶片級的隨機數生成器,從而使得新的伺服器都自帶熱噪聲的本地源隨機數生成能力——真正的隨機數生成器這一偉大的發明還有13年的時間。
在這段時間當中,如果程式猿想要實現比較【隨機】的【隨機數】基本上就是透過不斷的最佳化演算法來進行實現的。
隨機數對於整個計算機歷史都有著非常重要的意義,因為大家都知道計算機的本質是二進位制,0101,這樣產生的數字幾乎不存在隨機性,也就是缺少了【擲骰子】的過程,但是隨著計算機的不斷發展,人們對於隨機的要求也越來越高。
且不說遊戲當中需要讓ai來進行一定的隨機行為,讓玩家產生新鮮感,哪怕是正常的統計學當中,還有在各種透過計算機模擬的實驗當中,都需要用到隨機。
隨機數對於未來的資訊加密、統計和遊戲領域都有著舉足輕重的作用。
梅森旋轉是在1997年的時候,由松本真和西村拓士發明的。它完美地平衡了效能和隨機數的質量,並且經受住了時間的考驗。
姚夏直接用這個演算法,可以引起清大教授的重視,從而能獲得直接去清大進修的機會。
第二個,這個演算法雖然是1997年發明的,可本質上用現有的計算機效能就能支援,同時姚夏採用的c語言是現在比較主流的面嚮物件語言之一。
一切都符合這個時代的特徵。
好多經典的演算法都已經被前人給用過了,比如說非常有名的fft演算法,快速傅立葉變換,1965年的時候就已經被人給提出來。
不然姚夏肯定會優先寫這個。
傅立葉的名字對於許多小夥伴們來說絕對不陌生,而且不管哪個領域,只要你學習跟數學、物理、計算機……理工科相關,就一定會為這個名字頭疼不已。
啊……
姚夏想到傅立葉變換,不由得感嘆一聲,它是多麼美啊。
當然,姚夏寫的這個梅森旋轉也沒有好到哪裡去,大家肯定都聽說過【梅森素數】,之所以這個演算法的名字要叫做梅森旋轉,本身跟梅森沒有多少關係,而是因為它的迴圈節是219937-1,這個叫做梅森素數。
其他的還有什麼迪傑斯特拉演算法,rsa非對稱加密演算法,雜湊安全演算法……都不如梅森旋轉更適合。
第三,相比起其他的可以【適當】表現自己水準的程式來說,姚夏寫這個感覺更容易一些,全部寫完加起來也不過百多行的程式碼量。