zoukankan      html  css  js  c++  java
  • 对C语言随机数函数rand的一些理解

    int rand(void) : stdlib.h
    返回[0,RAND_MAX]范围的整数,ANSI C只规定了函数rand的返回值类型(即int)和返回值上界(即RAND_MAX),也就是说,任何一个具体的实现,只要RAND_MAX不超过其所在平台int的正向最大值都是允许的(不然返回值发生溢出),例如,
    在VC++2010和MinGW GCC TDM 5.1 32bit中,RAND_MAX=32767=0x7FFF,即short int的正向最大值
    在CentOS 7的GCC 4.8.2 x86_64中,RAND_MAX=2147483647=0x7FFFFFFF,即其int的正向最大值
    PS:RAND_MAX这个宏定义位于stdlib.h中

    在rand函数内,维护着一个计数器,每次调用rand函数都会使计数器+1,然后计数器与种子发生运算,返回[0,RAND_MAX]中的一个整数,这也导致了每次运行相同的rand函数总是返回相同的值,如,
    int i;
    for (i=0;i<10;i++){
    printf("%d ",rand());

    }
    每次运行,得到的10个随机数都相同。

    void srand(unsigned int) : stdlib.h
    依据传入的无符号整数,来设置对应的随机数种子,这个随机数种子是全局的变量,能够被rand函数读取,能够被srand函数修改。

    time_t time(time_t *) : time.h
    返回从Unix元年(1970年1月1日0点)到当前时间所经过的秒数,
    typedef __time64_t time_t; : types.h
    typedef __int64 __time64_t; : types.h
    #define __int64 long long : _mingw.h
    time函数获取秒数有两种方式,
    1.直接通过函数的返回值获取秒数,
    2.通过传入一个time_t类型的地址,函数会将秒数也保存到这个地址上,
    当传入的指针是NULL或0时,函数只通过返回值返回秒数。

    由于秒数总是在向前变化,所以可以利用time函数的返回值来作为srand的传入参数。
    在写这篇文章时,time(0)返回的值是1583975156,在unsigned int范围内。

    PS:rand函数使用线性同余法实现随机数,是伪随机数,由于周期较长(至少是32767),因此在一定范围内可以看成是随机的。

  • 相关阅读:
    AS3 条件编译
    as3 中trace() 函数对效率的影响
    将as3代码转换成为js代码
    flash图标插件
    STAR面试法
    虚拟机window7与主机之间文件复制设置
    linux虚拟机网络设置好ping百度没有用
    Linux常用命令
    路由器wiff设置
    linux网络启动报错
  • 原文地址:https://www.cnblogs.com/ryzz/p/12467291.html
Copyright © 2011-2022 走看看