有关c++的随机数发生器。该死的32765解决方法

有关c++的随机数发生器。该死的32765
C/C++ code
int 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。