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)。

  • 相关阅读:
    免费linux远程主机nitrousIO
    利用PyWapFetion发免费天气短信
    接口中的 sort排序 + md5加密
    即点即改心得
    js判断客户端访问是安卓还是ios
    php将时间戳转换成几小时前的格式封装
    前端请求接口出现的跨域问题
    使用redis技术实现注册登录列表以及关注功能
    windows下的redis安装以及扩展安装
    Yii2 学习心得
  • 原文地址:https://www.cnblogs.com/yatesxu/p/5441876.html
Copyright © 2011-2022 走看看