• Qt 随机数


    相关函数    #include <QtGlobal>

    qsrand(unsigned seed);
    qrand(); 

    以上函数产生的随机数为伪随机数。之所以称为伪随机数,有以下两点原因:

    1:qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间

       (RAND_MAX == 32767)。如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。

    2:之所以称为随机数,因为种子的值相同的情况下,函数运行两次产生的随机序列一致

    注意:qrand()函数产生的是一个随机序列,只不过每次只返回一个值。举例如下:

    #include <QTime>
    #include <QtGlobal>
    #include <QDebug>
    
    
    void generateAscendRandomNumber()
    {
        int i;
        QList<int> numbersList;
        qsrand(10);
        for(i=0;i<10;i++)
        {
            numbersList.append(qrand()%10);
        }
        qSort(numbersList.begin(),numbersList.end());
        for(i=0;i<10;i++)
        {
            qDebug()<<numbersList[i];
        }
    }
    
    int main()
    {
        generateAscendRandomNumber() ;
    }

    以上输出为:1  2  2  2  4  6  6  7  9(实际会换行)

    多次运行程序发现输出结果是一致的。因为种子不变的情况下,qrand()运行多次产生的随机序列一致。

    结论:种子相同,每一个随机序列内的每一个数都是随机的,但是随机序列之间却不是随机的。

    为了获得不同的随机序列,可以使用当前时间作为种子,来进行模拟随机数。因为时间是不断变化的,即种子的值也是不同的,所以产生的随机序列也是不同的。

    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()))

    int QTime::secsTo ( const QTime & t ) const

    函数返回这个时间到t的秒数(如果t早于这个时间,返回的为负数)。因为QTime只能度量一天之内的时间,而且一天内只有86400秒,

    所以结果就应该在-86400秒和86400秒之间。

    实际上QTime(0,0,0).secsTo(QTime::currentTime())返回的值就是从0到QTime::currentTime()的值。

  • 相关阅读:
    Linux Shell常用技巧(一)
    使用Native API 创建进程
    Windows操作系统下创建进程的过程
    Windows操作系统下创建进程的过程
    windows运行打开服务命令
    windows运行打开服务命令
    出错提示:“Could not flush the DNS Resolver Cache: 执行期间,函数出了问题”的解决方法
    出错提示:“Could not flush the DNS Resolver Cache: 执行期间,函数出了问题”的解决方法
    对XP上的KiFastSystemCall进行浅析
    对XP上的KiFastSystemCall进行浅析
  • 原文地址:https://www.cnblogs.com/fuqia/p/8903595.html
Copyright © 2020-2023  润新知