另外在Windows系统下rand()函数好像有点问题? 我使用下面的代码: UINT m_uWidth=40; srand(m_uWidth); int x=rand(); 或者 int x=(BYTE)rand(); 或者 int x=(WORD)rand(); 结果却产生一个很大的数,好几百的,每次都是,为什么呢? 是不是rand()函数在Windows下不兼容呀?我的系统是Windows2000中文版!
确实没有什么新的API函数用来取随机数,因为rand()完全可以运行的很好了。 也许你在使用rand()函数的时候发现每次运行程序得到的随机数总是差不多大,其实你用同一个随机数种子多rand()几次就好了,rand()的次数越多,数据越随机。因为rand()也是机器的一种算法,所以不可能是真的随机的。所以建议你这样干。随机性就会大大增强: 方法一: UINT m_uWidth=40; srand(m_uWidth); rand(); rand(); x = rand(); //第三次调用随机性就很大了 srand(x); //再用随机数作为种子 x = rand(); //这样就很随机了方法二:srand( (unsigned)time( NULL ) ); //取时间为种子for( i = 0; i < 10;i++ ) rand();int x = rand(); //取第11个随机数为自己所用,非常随机了。
To jason802(小糊涂仙): 我想说的是为什么我设置的srand()函数没有起作用呀? 因为明明已经将 m_uWidth=40 了,但使用 srand(m_uWidth) 后结果为什么会产生一个超过m_uWidth(40)的随机数呢?
兄弟,你理解错了,srand(x),是取x为种子去计算随机数,随机数的大小为0~RAND_MAX(这个数=16进制0x7fff),你要取0~m_nWidth之间的随机数,就这样 int x = rand()%(m_nWidth+1)
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.RAND_MAX = OX7FFF in VC++
rand()在程序每次重新执行后的值相等。
我使用下面的代码:
UINT m_uWidth=40;
srand(m_uWidth);
int x=rand(); 或者 int x=(BYTE)rand(); 或者 int x=(WORD)rand();
结果却产生一个很大的数,好几百的,每次都是,为什么呢?
是不是rand()函数在Windows下不兼容呀?我的系统是Windows2000中文版!
也许你在使用rand()函数的时候发现每次运行程序得到的随机数总是差不多大,其实你用同一个随机数种子多rand()几次就好了,rand()的次数越多,数据越随机。因为rand()也是机器的一种算法,所以不可能是真的随机的。所以建议你这样干。随机性就会大大增强:
方法一:
UINT m_uWidth=40;
srand(m_uWidth);
rand();
rand();
x = rand(); //第三次调用随机性就很大了
srand(x); //再用随机数作为种子
x = rand(); //这样就很随机了方法二:srand( (unsigned)time( NULL ) ); //取时间为种子for( i = 0; i < 10;i++ )
rand();int x = rand(); //取第11个随机数为自己所用,非常随机了。
我想说的是为什么我设置的srand()函数没有起作用呀? 因为明明已经将 m_uWidth=40 了,但使用 srand(m_uWidth) 后结果为什么会产生一个超过m_uWidth(40)的随机数呢?
srand(m_uWidth) 函数不是指定产生一个 〔0-m_uWidth〕 之间的随机数吗?
不会是我理解错了吧!
rand();这样才是真正的随机。
int x = rand()%(m_nWidth+1)
随机数序列,起不到很好的作用。
正常用法是:
srand( (unsigned)time( NULL ) ); //取时间为种子
rand();
目前还没有增加随机性的简单方法。
尤其是 jason802(小糊涂仙) 老兄,谢谢你一针见血的指出的问题的实质!
至于设定范围的方法有很多种的,我也会找到一种比较好的方法!