VC 用来产生随机数的函数 rand() 好象有 bug
用 VC 产生由 1,2 组成的伪随机数序列,序列长度为 30,来看序列中连续出现 1 的最大个数。
比如,有一个序列长度为 30, 由 1,2 组成的伪随机数序列:
1 2 2 1 2 1 1 2 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 2 2 1 2 1
则序列中连续出现 1 的最大个数是 8 。
=========================================================================
用 VC 产生一个序列长度为 30, 由 1,2 组成的伪随机数序列的程序为:
int c[30];
srand((unsigned)time(NULL));
for(int i=0;i<=29;i++)
{
c[ i ]=rand()%(2-1+1)+1;
}
=========================================================================
结果发现:
用 VC 产生 由1,2组成的伪随机数序列, 序列中连续出现 1 的最大个数不会超过 15。 连续出现 1 的最大个数从 2,3,4,。。,15 都会反复出现,但是大于 15 从来就没有出现过。(已验证了数十亿个这样的序列,均如此)
按理,作为随机数序列,连续出现 30 个 1 (即序列的全部元素都是 1)都是可能的,而现在最多只连续出现 15 个 1,是不是 rand() 函数有问题?