关闭

random函数实现

796人阅读 评论(0) 收藏 举报
rand(产生随机数)  
相关函数 
srand
 
表头文件 
#include<stdlib.h>
 
定义函数 
int rand(void)
 
函数说明 
rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。
 
返回值 
返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。
 
范例 
/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考
srand()*/
#include<stdlib.h>
main()
{
int i,j;
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d ",j);
}
}
 
执行 
9 4 8 8 10 2 4 8 3 6
9 4 8 8 10 2 4 8 3 6
 
  



srand(设置随机数种子)  
相关函数 
rand
 
表头文件 
#include<stdlib.h>
 
定义函数 
void srand (unsigned int seed);
 
函数说明 
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
 
返回值 

范例 
/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/
#include<time.h>
#include<stdlib.h>
main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(" %d ",j);
}
}
 
执行 
5 8 8 8 10 2 10 8 9 9
2 9 7 4 10 3 2 10 8 7


实现原理:  产生整数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 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15122次
    • 积分:307
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:7篇
    • 译文:0篇
    • 评论:1条
    最新评论