據統計,透過搜尋連結至本部落格最常用的關鍵字是某靈媒的名字,其次是某特異功能人士的名字,雖然我有點不爽但並不算太意外。

真正讓我意外的是,有人用「C 真亂數產生器」之類的關鍵字連過來,我猜是因為這篇文章的關係。我覺得意外的原因,是因為我以為這是已經是最基本的常識。

這裡鄭重告訴所有使用「C 真亂數產生器」之類的關鍵字找到本文的網友:

這種東西不存在,請不用找了。

 

所有用確定性演算法寫出來的都是假亂數,頂多就統計特性比較好。如果需要讓人難猜一點,可以取一些很難預測的東西當種子,例如時間、滑鼠位置等等,但本質上整個序列仍然依照一定規則產生,理論上是可以被辨識及預測的。

如果要找重複週期、統計特性、速度、高維分佈狀況俱佳的亂數產生器,可以查查 Mersenne twister (Boost library裡面有)。但不要再花時間找程式語言寫的真亂數產生器,真的沒有這種東西。

真亂數必須求助於物理方法,不可能用確定性演算法產生,別白費力氣了。

 


 

附帶一提,之前看到有網友因為程式陷入卡死狀態,所以希望找一種靜態分析工具或除錯工具,可以自動判斷程式中會不會出現無窮迴圈。

如果你也在找這種工具,這裡也鄭重告訴你:

這種東西不存在,請不用找了

 

有些常見的簡單 pattern 可以用 heuristic 或 case by case 的方法找,但是沒有通用於任何程式的方法,即使有這樣的方法也可能要執行無限久。這是早在現代化的電腦都還沒發明之前,就已經被人證明出來的經典問題。

novus 發表在 痞客邦 PIXNET 留言(0) 人氣()