zoukankan      html  css  js  c++  java
  • C++杂谈(三)产生随机数与time函数

    产生随机数在程序中很有用,这篇文章简单介绍一下产生随机数的方法。

    伪随机数

    使用标准库<cstdlib>中的rand()函数产生随机数。

    #include<iostream>
    #include<cstdlib>
    using namespace std;
    int main()
    {
        for (int i = 0; i < 3; i++) cout << rand()%10 << endl;//pesudo radom
        return 0;
    }

    表面上看,这段程序会产生三个随机数,但一个有趣的事情是,每次程序运行时产生的数据都是相同的。

    我每次运行的结果都如下:

    image

    可以看出,rand()函数并不会产生一个真正的随机数。

    要产生真正的随机数,需要了解time函数。

    time函数

    <ctime>中的time函数可以返回一个时间。函数声明如下

    time_t time(
       time_t *timer 
    );

    参数timer是一个指针,指向时间的存储位置。使用时参数可以为0。如果使用其他整数,比如1,会产生无法从int转换成timme_t的错误。

    #include<iostream>
    #include<ctime>
    using namespace std;
    int main()
    {
        cout << time(0)<<endl;
        return 0;
    }

    对于time函数的返回值,一把理解应该是当前的时间,但事实运行结果却并不如所想。

    image

    事实上,这个结果便是当前时间,只是表示方法有所不同。这个值是从1970年1月1日午夜到现在的秒数。

    真正的随机数

    <cstdlib>中产生用于真正随机数的函数srand()。函数接受一个参数作为seed,用于控制rand()函数的算法。相同的seed会使rand()产生相同的结果。

    所以,若要产生真正的随机数,可以使用时间作为seed,这样每次都会产生真正的随机数了。

    #include<iostream>
    #include<cstdlib>
    #include<ctime>
    using namespace std;
    int main()
    {
        srand(time(0));
        for (int i = 0; i < 3; i++) cout << rand() << endl;//truly random
        return 0;
    }

    这样,在使用了stan()之后,rand便可产生真正的随机数了。

    控制随机数的范围

    可以使用模运算来控制随机数的范围。下面代码产生了[0,10)范围的随机数。

    rand()%10;

    一个例子,展示了这篇文章提及的函数。

    #include<iostream>
    #include<cstdlib>
    #include<ctime>
    using namespace std;
    int main()
    {
        cout << time(0)<<endl;//返回一个秒数
        for (int i = 0; i < 3; i++) cout << rand() << endl;//pesudo radom
        srand(time(0));
        for (int i = 0; i < 3; i++) cout << rand()%10 << endl;//truly random
        return 0;
    }

    首先输出一个秒数。

    接着输出了3个随机数,这三个随机数每次都是相同的。

    使用时间作为seed,rand()函数的返回值。

    产生3个真随机数,其范围是[0,10)。

  • 相关阅读:
    3-12 初识JWT
    3-11 用户登录信息验证实现
    3-10 公共模块统一测试
    3-9 公共业务异常统一处理
    3-8 公共返回对象封装
    3-7 公共请求对象封装及优雅验证数据实现
    3-6 MD5介绍及用户添加功能实现
    3-5 用户模块数据层构建
    3-4 用户模块构建
    3-3 公共工具模块构建
  • 原文地址:https://www.cnblogs.com/yatesxu/p/5441876.html
Copyright © 2011-2022 走看看