作者stimim (qqaa)
看板Prob_Solve
标题Re: [问题] 乱数测试问题
时间Fri Mar 18 19:40:50 2011
※ 引述《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)
1F:推 tropical72:谢谢您的说明 !! 03/18 19:50