Re: [問題] 亂數測試問題

看板Prob_Solve (計算數學 Problem Solving)作者 (qqaa)時間13年前 (2011/03/18 19:40), 編輯推噓1(100)
留言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
文章代碼(AID): #1DWqJ5IS (Prob_Solve)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1DWqJ5IS (Prob_Solve)