[問題] 亂數測試問題

看板C_and_CPP作者 (藍影)時間14年前 (2011/03/18 17:46), 編輯推噓3(309)
留言12則, 4人參與, 最新討論串1/1
※ [本文轉錄自 Prob_Solve 看板 #1DWodeMF ] 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 來自: 180.177.72.67 (03/18 17:47)

03/18 18:24, , 1F
「數字重覆出現」和「週期重覆」是不一樣的兩件事喔...
03/18 18:24, 1F

03/18 18:25, , 2F
而且週期也不一定是 RAND_MAX 可以更長
03/18 18:25, 2F

03/18 18:36, , 3F
請教LPH66版大,這部份若是要算「週期重覆」是否有現有
03/18 18:36, 3F

03/18 18:36, , 4F
之演算法該參閱?
03/18 18:36, 4F

03/18 19:27, , 5F
unsigned char c = RAND_MAX; ← 這樣會取 MOD
03/18 19:27, 5F

03/18 19:28, , 6F
拍謝我看錯...
03/18 19:28, 6F

03/18 19:52, , 7F
love大5F的式子我想了一下,還蠻有趣的..(c=0xff)
03/18 19:52, 7F

03/18 20:16, , 8F
剛剛用win7+VC2008, not_cnt_one 也是2萬初
03/18 20:16, 8F

03/18 20:22, , 9F
to eric~:抱歉,這篇我的測試立足是錯的,在 Prob_Solve
03/18 20:22, 9F

03/18 20:23, , 10F
已有人指定,所以這部份我還得想辦法重新設計測試.
03/18 20:23, 10F

03/18 20:23, , 11F
謝謝您幫忙實際測試 ^^
03/18 20:23, 11F

03/18 20:24, , 12F
對厚 果然一起走錯路了 XDDD
03/18 20:24, 12F
文章代碼(AID): #1DWoeIX_ (C_and_CPP)