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();
for(i=;i<;i++)
{
numbersList.append(qrand()%);
}
qSort(numbersList.begin(),numbersList.end());
for(i=;i<;i++)
{
qDebug()<<numbersList[i];
}
} int main()
{
generateAscendRandomNumber() ;
}

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

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

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

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

qsrand(QTime(,,).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()的值。

上一篇:python基础-闭包函数和装饰器


下一篇:ansible-playbook如何判断并中断执行