Linux中获取和使用随机数
在linux系统中,有提供的API来产生随机数:srand初始化随机种子,rand产生随机数。rand(产生随机数)表头文件: #include<stdlib.h>定义函数 :int rand(void) 函数说明 :因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的(伪随机数),rand()会返回一随
在linux系统中,有提供的API来产生随机数:srand初始化随机种子,rand产生随机数。
rand(产生随机数)表头文件: #include<stdlib.h>
定义函数 :int rand(void)
函数说明 :
因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的(伪随机数),rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。
返回值:
返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。
0~RAND_MAX每个数字被选中的机率是相同的。
srand(设置随机数种子)
表头文件:#include<stdlib.h>
定义函数:void srand (unsigned int seed);
函数说明:srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
下面用实例说明两个函数的使用
rand()
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int i = 0, val = 0;
printf("RAND_MAX = %d.\n", RAND_MAX); // 2147483647
val = rand();
printf("%d ", val);
printf("\n");
/*
如果不想要那么多的位数则可以对产生的随机数进行求余
for (i=0; i<6; i++)
{
val = rand();
printf("%d ", (val % 6));
}
*/
return 0;
}
srand()
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int i = 0, val = 0;
/*
通过执行函数的时候进行传参获得种子
if (argc != 2)
{
printf("usage: %s num\n", argv[0]);
return -1;
}
srand(atoi(argv[1]));
*/
printf("RAND_MAX = %d.\n", RAND_MAX); // 2147483647
srand(time(NULL));
for (i=0; i<6; i++)
{
val = rand();
printf("%d ", (val % 6));
}
printf("\n");
return 0;
}
使用时间来作为种子,也是有缺陷的,因为当程序运行比较快的时候,产生的随机数就是一样的
所以在真正使用的时候,会根据具体的情况来进行种子的产生,本例中使用时间只是做为一个演示
注明:本博客是根据朱有鹏老师的视频所作的总结
更多推荐
所有评论(0)