想要計算機產生一個隨機數可不像我們扔色子一樣簡單,計算機執行的每一步操作,說白了就是執行一堆代碼,這些代碼是事先被安排好的,所以計算機的產生行爲是不具有隨機性和預測性的(除非有一天計算機的結構不再是現在的體系結構,而是下一代的體系),可想而知計算機所產生的隨機數都不是真正意義上的隨機數,只是僞隨機數。 要產生一個僞隨機數,只能通過一定的算法來實現了,於是又了rand()函數,他可以產生一個僞隨機數,但是你會發現,同一個程序被執行了N次後,每一次執行所產生的隨機數都是一樣的!原因很簡單,前面說過,計算機只能通過一定的算法來達到隨機的目的,rand()函數也是,有一個“基數”來產生相應的隨機數,每一個基數“對應”一個僞隨機序列,所以如果程序每次執行時rand()函數的基數都一樣,那麼產生的僞隨機數當然就一樣了!那麼怎麼解決這個問題呢,很簡單,每次程序執行時,爲rand()函數分配不同的基數就可以了! 於是又有了srand()函數,我們通常這樣寫:srand(unsigned(time(NULL))); 它的返回值爲從 00:00:00 GMT, January 1, 1970 到現在所持續的秒數,然後將time_t型數據轉化爲(unsigned)型在傳給srand函數,即: srand((unsigned) time(&t)); 每次執行程序時,他的返回值肯定是不一樣的,這就達到了隨機的效果。 |