Qt 随机数

相关函数    

qsrand(unsigned seed);
qrand(); 

这两个函数则在#include <QtGlobal>里

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

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

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

猜你喜欢

转载自www.cnblogs.com/fuqia/p/8903595.html