zoukankan      html  css  js  c++  java
  • rand随机函数

    1、rand()          

    rand()函数是使用线性同余法做的,它并不是真的随机数,因为其周期特别长,所以在一定范围内可以看成随机的。          

    rand()函数不需要参数,它将会返回0到RAND_MAX之间的任意的整数。[0, RAND_MAX],(0 and RAND_MAX included)。

    如果我们想要生成一个在区间[0, 1]之内的数,那么我们可以写出如下代码:

    rand_num = rand()/RAND_MAX;

    c++中rand()函数生成的范围:0~RAND_MAX  

    RAND_MAX是C中stdlib.h中宏定义的一个字符常量  

    centos7下面(GNU C++也是),他定义的是  

    /* The largest number rand will return (same as INT_MAX).  */

    #define RAND_MAX        2147483647    

    在vs2012下面(32767),他是:  

    #define RAND_MAX 0x7fff

    • rand函数产生一个0到RAND_MAX的伪随机数,这里的RAND_MAX因不同的实现而异,但RAND_MAX至少为32767。

    • 有些时候,用户需要获取一定更小范围中的一随机数,如得到一组100以内的随机数,就可以采用rand()%100这种方法,使得结果在100以内。

      • %是模运算,表示整除 右操作数 取余数

      • 如果想得到【1,100】之间的随机数,则需要对上面的加法进行加工,写成:

        (rand()%100)+1;  //先得到0-99的随机数,然后加1,可得1-100区间内的数

    可见,由要生成的随机范围N,进行缩放rand()%N和偏移+a

    2、srand()

    srand(time(0));

    仅rand();生成的是伪随机数,多次运行结果不变。

    srand()为初始化随机数发生器,用于设置rand()产生随机数时的种子。传入的参数seed为unsigned int类型,通常我们会使用time(0)或time(NULL)的返回值作为seed。

    不调用srand(),将默认为srand(1)。

    引入变化的种子:使用time(NULL)或time(0)来表示变化的种子,time(0)的返回的是从1970 UTC Jan 1 00:00到当前时刻的秒数,为unsigned int类型。

    time函数原型在<ctime>头文件中。

    在不同时刻运行程序时,就会有不同的随机数种子,因此就可以得到不同的结果。引入sleep(1.0)。

    3、使用

    #include<cstdlib>

    cstdlib(即:stdlib.h)中常用到的函数:
    rand函数:用于产生随机数
    srand函数:用于初始化随机数种子
    system函数:用于DOS系统功能调用
    exit函数:用于退出程序
    qsort函数:快速排序
    itoa、atoi、atof等一系列转换函数
    malloc函数:(也可以用头文件malloc.h)动态分配内存

    #define EXIT_SUCCESS 0

    return EXIT_SUCCESS;

    using std::rand;

    using std::srand;

    srand(seed);//seed每次要变

    num=(1+rand()%6);//1-6随机数

    【转载自】

    关于rand()和srand() - 微念的博客 - CSDN博客 https://blog.csdn.net/u013745804/article/details/82379266

    std::rand - cppreference.com https://en.cppreference.com/w/cpp/numeric/random/rand

  • 相关阅读:
    AOC的服务还不错
    浅谈Java、MySQL的中文排序问题
    祝cnBlogs的Blogger们新年快乐!
    GT 3.9.4以及今天的工作
    堆排序
    桶排序
    常用排序算法稳定性分析
    VS2010远程调试环境配置详解
    基数排序
    如何修改数据库的服务器名称
  • 原文地址:https://www.cnblogs.com/wxl845235800/p/11171725.html
Copyright © 2011-2022 走看看