Re: [問題] 消失的亂數
如果你 希望產生的亂數的變化越多越好,
而且保持均勻分布的亂數要求,
那麼,可以考慮
a= 7^5,
b= 0,
c= (2^31) - 1
那麼,產生的亂數範圍是
1 - 2147483648
在產生 同一個亂數之前,
每一個 數字都會 出現一次
如果覺得這個亂數的週期不夠長,
那麼可以考慮 double 的精確度是
52個 bits, 大約是 2^52
把 a, b, c擴大,測試找出一組 合適使用的
亂數產生的 常數,配合 ftime() 函數的 ms + time()
函數的 second, 把 (second % (10*86400))*1000 + ms 當作
亂數的 種子數。
這樣子,應該夠亂,也夠長了。
good luck to you!
※ 引述《liwmewmew (如果大海能夠)》之銘言:
: 小弟最近在研究亂數
: 想取[0, 1]之間的任一浮點數亂數 (包括0與1)
: 所以寫出了 rand()/(float)RAND_MAX 這樣的語法
: 結果發現,因為分母是奇數(32767),所以絕對取不到0.5這個亂數
: 所以試著把分母變為偶數 rand()/(float)(RAND_MAX+1)
: 但發現這樣取不到1.0這個亂數
: 又如果改成 (rand()+1)/(float)(RAND_MAX+1)
: 那可以想像會取不到0.0這個亂數
: 如果我把分母乘兩倍(一個偶數) rand()/(float)RAND_MAX*2
: 最後只要我敢把偶數乘數也乘到rand()上 ,那我的亂數就會分佈不均的樣子
: (rand()/(float)RAND_MAX*2)*2
: 不知道有沒有大大有什麼建議的
: 真的非常謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.30.75.208
推
09/25 12:06, , 1F
09/25 12:06, 1F
推
09/25 12:16, , 2F
09/25 12:16, 2F
→
09/25 12:30, , 3F
09/25 12:30, 3F
→
09/25 12:31, , 4F
09/25 12:31, 4F
→
09/25 12:33, , 5F
09/25 12:33, 5F
推
09/25 13:38, , 6F
09/25 13:38, 6F
→
09/25 13:39, , 7F
09/25 13:39, 7F
→
09/25 14:08, , 8F
09/25 14:08, 8F
→
09/25 14:09, , 9F
09/25 14:09, 9F
推
09/25 14:13, , 10F
09/25 14:13, 10F
推
09/25 15:44, , 11F
09/25 15:44, 11F
→
09/25 16:04, , 12F
09/25 16:04, 12F
討論串 (同標題文章)