推 kkroy:我了解了!十分謝謝你!還專程寄站信箱耶,可惜我不會用bbs... 06/20 17:17
亂數的 基本精神:
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