rand的产生的随机数不大与0x7ff

来源:互联网 发布:社科数据采集费报账 编辑:程序博客网 时间:2024/05/14 10:35
 最大32767 (2^16-1)。  系统里的随机数是利用初等数论中的同余定理来实现的.  整数rand的原理是:  y=ax+b(mod n)其中,n一般是一个很大的素数,几万。  a也是大素数。而且a,b,n都是常数。所以rand的产生决定于x,  他被称为seed。  每一个seed都是上一次产生的y的函数。这样,如果直接取seed=y的话,  虽然产生的rand之间相关性甚小,但只要知道某个y,就能推知以后的rand。  为避免这种情况,一般取seed为y和当时计算机的时间的函数,如seed=y+t比如VC中对于rand()函数是如下实现的.  int __cdecl rand (void)  {  return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);  }