精華區beta C_and_CPP 關於我們 聯絡資訊
亂數的 基本精神: R(n)= (R(n-1)*a + b) mod c 第 n 個亂數,等於 前一個亂數, 乘上 常數 a, 加上 常數 b 以後的結果, 對 常數 c 取餘數。 所以, srand() 的目的,是設定 種子數。 利用 時間函數 time(NULL) 得到的數字是 目前的秒數, 1970/01/01 的 00:00:00 到現在的秒數, 所以,如果你在 一秒鐘的間隔之內,呼叫 srand(), 回得到相同的 秒數,所以 會設定使用 相同的 種子數, 所以會得到相同的 亂數數列。 ※ 引述《kkroy (大豬小豬肉一斤)》之銘言: : 大家好, : 我想請問一下,當我取亂數時,以srand((unsigned)time(NULL))作為種子, : 為什麼只要在main()裡執行一次就可以了,之後需要用到亂數時直接呼叫rand()函數, : 而不是每次呼叫一次亂數函數就設定一次種子srand(.)? : 又如果我用迴圈跑50個rand()亂數,但是每跑一次迴圈就設定一次srand(.)種子, : 這樣產生的亂數跟 我只在main()裡面、跑迴圈前設一次srand(.)種子, : 再用迴圈執行50次rand()得到的50個隨機亂數, : 是不是應該都是 0~RAND_MAX 的 Umiform distribution 沒有差別? : 謝謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.231.53.61
kkroy:我了解了!十分謝謝你!還專程寄站信箱耶,可惜我不會用bbs... 06/20 17:17