Re: [問題] 亂數測試問題
看板Prob_Solve (計算數學 Problem Solving)作者stimim (qqaa)時間13年前 (2011/03/18 19:40)推噓1(1推 0噓 0→)留言1則, 1人參與討論串2/2 (看更多)
※ 引述《tropical72 (藍影)》之銘言:
: 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 次不等。
你可能要重新思考一下 random 的意思
假設每一個數字 (0 ~ 32727) 被選到的機率都是 1 / 32768
連選 100 個數字而不重複的機率是:
0.857039
連選 200 個數字而不重複的機率是:
0.540826
連選 400 個數字而不重複的機率是:
0.0867036
如果要 連選 32768 個才重複的話,機率是:
4.9571607272503 * 10^-14229
: 我想內建的 rand() 品質應沒這麼不好吧 ?
: 故想請教各位有經驗之先進,是否我的測試出了什麼問題?
: 謝謝各位先進不吝指教
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.157.191
※ 編輯: stimim 來自: 61.228.157.191 (03/18 19:41)
推
03/18 19:50, , 1F
03/18 19:50, 1F
討論串 (同標題文章)
Prob_Solve 近期熱門文章
PTT數位生活區 即時熱門文章