有关c++的随机数发生器。该死的32765解决方法
有关c++的随机数发生器。该死的32765C/C++ codeint mRnd0srand((unsigned) time(NULL))//难道是这句有问
有关c++的随机数发生器。该死的32765
C/C++ codeint mRnd=0; srand((unsigned) time(NULL));//难道是这句有问题吗? while(mRnd<xRnd)//一旦xRnd超过32765太多,程序便会立即卡死,cpu资源耗尽。 { uint a=uint(double(rand()/(RAND_MAX-0.0)*xALL));//xALL为myarr大小,超过1000000 if(myarr[a].yfill==0)//yfill为标志位 { uint b=a%22; myarr[a].ter[b]=myarr[a].yfill=1;//程序根据结构体数组myarr中的ter[x]==1来统计最后的随机结果,经测试,xRnd>32765的话,那么统计结果固定是32765。???为什么 ++mRnd; } }
问题是,xRnd<=32765 ,甚至稍大,程序都可以瞬间完成,但超过较多比如xRnd=70000的时候就会出现卡死的问题,修改过RAND_MAX,没有作用。高手帮忙分析下原因
[解决办法]>修改过RAND_MAX,没有作用。
RAND_MAX不是给乃修改的。它是告诉乃CRT的rand()产生的值是0到RAND_MAX之间,但并不是说rand()的值
取决于RAND_MAX。所以就算修改RAND_MAX,以m$的那个CRT,照样是产生在0~32767之间。一旦xRnd>=32768,那个不等式恒成立,当然死循环了。
[解决办法]个人估计:rand的随机特性是有限的,当运行过一段时间后,出来的数据就是相同的了,如果是这种情况,mRnd得不到++(根据已有的代码的逻辑),然后就死循环了。
要确认其实很简单,把a的值printf出来,在if语句内也加printf。
另外LZ是什么平台,我这里的RAND_MAX为2147483647。