- 论坛徽章:
- 0
|
10可用积分
我写了这么一个小程序:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
srand(time(NULL));
int r=abs(rand());
float f=r;
f/=RAND_MAX;
f*=13;
int result=(int)ceil(f);//为了产生1-13之间的随机数,代表扑克牌
printf("%d\n",result);
return 0;
}
在solaris8+CC上面编译,执行了./a.out若干次,输出的结果是:
12,6,7,13,1,7,8,1,2,8,2,3,9,10,3,10,10,4,11,4,5,11,5,12,6,12,13,6,13,1,7,1,1,2,8,9,2,3,10,4,10,,4,4,11
我发现:一个数字如果出现了,那么接下来3次运行,再次出现几率也是相当高的。我换成了g++(2.95.2)编译器,结果类似
3,9,3,10,3,4,10,4,11,4,5,5,12
这说明什么呢?srand并不能真的产生一个可靠的随机数种子?
还请dx指点!! |
最佳答案
查看完整内容
你的种子是根据time(NULL)函数来的, 如果你点太快的话 生产的种子基本上一样,应该会影响你产生的随机数。 按自己的经验 只要相隔一秒以上 基本不得怎么这么频繁重复
|