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;
}

 

posted @ 2017-03-16 23:44  SongPF  阅读(1404)  评论(0编辑  收藏  举报