[問題] 亂數測試問題

看板Prob_Solve (計算數學 Problem Solving)作者 (藍影)時間13年前 (2011/03/18 17:46), 編輯推噓0(007)
留言7則, 2人參與, 最新討論串1/2 (看更多)
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)

03/18 18:11, , 1F
我倒覺得這樣的結果非常合理
03/18 18:11, 1F

03/18 18:12, , 2F
可以請教 tkcn 版大為何嗎?小弟主觀的均勻度應是在
03/18 18:12, 2F

03/18 18:13, , 3F
0~RAND_MAX 生成完一次之後,才可和之前之數字重覆.
03/18 18:13, 3F

03/18 18:13, , 4F
是否我的觀念有所誤差?
03/18 18:13, 4F

03/18 18:18, , 5F
骰子是好的亂數了吧? 但連骰六次有重複數字的機率有多大?
03/18 18:18, 5F

03/18 18:19, , 6F
6! / (6^6) 這是不重複的機率,只有 1.5 %
03/18 18:19, 6F

03/18 18:46, , 7F
謝謝 tkcn 指教,這部份我再研究.感謝.
03/18 18:46, 7F
文章代碼(AID): #1DWodeMF (Prob_Solve)
討論串 (同標題文章)
文章代碼(AID): #1DWodeMF (Prob_Solve)