作者liwmewmew (如果大海能夠)
看板C_and_CPP
標題[問題] 消失的亂數
時間Thu Sep 24 14:13:53 2009
小弟最近在研究亂數
想取[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: 163.22.18.83
推 snowlike:到小數點後第三位 rand()%1001/1000 09/24 14:25
推 ledia:這告訴我們有理數是很鬆散的 (?) XD 09/24 14:42
→ jlovet:零到一之間的浮點數,少掉的可多著呢 09/24 15:16
推 cplusplus:自己填double裡面的bit怎麼樣? 09/24 18:28
推 cspy:要夠亂 抓sec丟進去一個SEED然後srand產生 rand產生的不夠亂 09/25 00:51
→ cspy:RAND產生的亂數 頻率是一樣的 09/25 00:52