linux中使用随机数
(1)单纯使用rand重复调用n次,就会得到一个0-RAND_MAX之间的伪随机数,如果需要调整范围,可以得到随机数序列后再进行计算。
(2)单纯使用rand来得到伪随机数序列有缺陷,每次执行程序得到的伪随机序列是同一个序列,没法得到其他序列
(3)原因是因为rand内部的算法其实是通过一个种子(seed,其实就是一个原始参数,int类型),rand内部默认是使用1作为seed的,种子一定的算法也是一定的,那么每次得到的伪随机序列肯定是同一个。
(4)所以要想每次执行这个程序获取的伪随机序列不同,则每次都要给不同的种子。用srand函数来设置种子。
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/time.h> int main(int argc ,char ** argv) { struct timeval tv={0}; struct timezone tz ={0}; /* if(argc!=2) { printf("usage:%s num\n",argv[0]); return -1; } */ //srand(atoi(argv[1])); gettimeofday(&tv,&tz);//获取微妙数 srand(tv.tv_usec); printf("rand max%d\n",RAND_MAX); for ( int i =0 ; i<6 ; i++) { printf(" %d ",rand()%20); } printf("\n"); return 0; }