作者tropical72 (藍影)
站內Prob_Solve
標題[問題] 亂數測試問題
時間Fri Mar 18 17:46:13 2011
os: xp, compiler: vc2008
小弟為測亂數品質(均勻度),使用以下方式記錄亂數出現數字
unsigned char* occ_times = (unsigned char*)malloc(RAND_MAX+1);
memset(occ_times, 0, RAND_MAX+1);
srand((unsigned)time(NULL));
for(i=0; i!=RAND_MAX+1; ++i) ++occ_times[rand()];
不過測出來效果似乎不好, 因去看結果時
unsigned not_cnt_one=0;
for(i=0; i!=RAND_MAX+1); ++i){
if(occ_times[i]!=1) ++not_cnt_one;
}
RAND_MAX = 32767, 出來的 not_cnt_one 高達 20000,
幾乎為 2/3, 而另一測試是測 "多久會開始重覆數字",
理想為 RAND_MAX ,但實際上卻只有 100~400 次不等。
我想內建的 rand() 品質應沒這麼不好吧 ?
故想請教各位有經驗之先進,是否我的測試出了什麼問題?
謝謝各位先進不吝指教
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.72.67
※ tropical72:轉錄至看板 C_and_CPP 03/18 17:46
※ 編輯: tropical72 來自: 180.177.72.67 (03/18 17:48)
→ tkcn:我倒覺得這樣的結果非常合理 03/18 18:11
→ tropical72:可以請教 tkcn 版大為何嗎?小弟主觀的均勻度應是在 03/18 18:12
→ tropical72:0~RAND_MAX 生成完一次之後,才可和之前之數字重覆. 03/18 18:13
→ tropical72:是否我的觀念有所誤差? 03/18 18:13
→ tkcn:骰子是好的亂數了吧? 但連骰六次有重複數字的機率有多大? 03/18 18:18
→ tkcn:6! / (6^6) 這是不重複的機率,只有 1.5 % 03/18 18:19
→ tropical72:謝謝 tkcn 指教,這部份我再研究.感謝. 03/18 18:46