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

  • 相关阅读:
    2017第10周日
    关于能聊
    mybatis的$存在安全问题,为什么又不得不用?
    Cassandra的登录认证授权
    elasticsearch安装过程中的license问题解决办法
    配置ModSecurity防火墙与OWASP规则
    apache安装php7过程中遇到到段错误
    mac下apache启动关闭操作
    mac下firefox复制粘贴失效解决办法
    firefox和chrome对于favicon.ico关于content-security-policy的不同处理
  • 原文地址:https://www.cnblogs.com/yatesxu/p/5441876.html
Copyright © 2011-2022 走看看