【Qt】Qt产生随机数

00. 目录

01. 概述

随机数就是就随机数种子中取出的数。
种子就是个序号,这个序号交给一个数列管理器,通过这个序号,你从管理器中取出一个数列,这个数列就是你通过那个序号得到的随机数。
但这个随技术并不真正随机。因为它是通过某个算法的得到。也就是说你给数列管理器同一个序号将得到同样一个“随机”数列。也就是说种子和随机数列是一一对应的。
{An}=f(x), x 就是种子,F()是算法,{An}是数列,这个数列看上去是随机的,这是因为An的通项很复杂。
例如:从1、2、3、4、5、6、7、8、9、0这十个数中随机取出一个数,取出的数是6的话,那么6就叫随机数。十个数字就叫随机数种子。如果是从1到50之间取数字,取出的数字叫随机数,这1到50那50个数字就叫随机数种子。

02. 开发环境

Windows系统:Windows10

Qt版本:Qt5.15或者Qt6

03. QRandomGenerator类介绍

QRandomGenerator类允许从高质量的随机数生成器获取随机值。

QRandomGenerator可用于从高质量随机数生成器生成随机值。与c++随机引擎一样,QRandomGenerator可以通过构造函数使用用户提供的值进行播种。当播

种时,这个类生成的数字序列是确定的。也就是说,给定相同的种子数据,QRandomGenerator将生成相同的数字序列。但是考虑到不同的种子,结果会有很大

的不同。

可以使用QRandomGenerator:: securely()创建一个QRandomGenerator,该生成器安全地使用QRandomGenerator::system()进行播种,这意味着它生成的数字

序列不容易预测。另外,QRandomGenerator::global()返回QRandomGenerator的全局实例,Qt将确保该实例被安全播种。这个对象是线程安全的,可以在大多

数情况下共享,并且总是从QRandomGenerator::system()中获得。

system()可用于访问系统的加密安全随机生成器。在Unix系统上,它相当于从/dev/urandom或getrandom()或getentropy()系统调用中读取数据。

该类可以生成32位或64位的数量,也可以填充这些数量的数组。生成新值的最常见方法是调用generate()、generate64()或fillRange()函数。有人会把它当作:

qurandomgenerator::global()->generate();

此外,它还提供了一个浮点函数generateDouble(),该函数返回范围为0,1的数字。

QRandomGenerator是根据c++标准库中对随机数引擎的要求建模的,可以在标准库引擎可以使用的几乎所有上下文中使用。这些要求的例外情况如下:

除了std::seed_seq本身之外,QRandomGenerator不支持从其他类似于种子序列的类中进行播种;

QRandomGenerator与std::ostream或std::istream不可比较(但可复制)或可流。

QRandomGenerator还兼容统一分布类std::uniform_int_distribution和std:uniform_real_distribution,以及自由函数std::generate_canonical。例如,下面的

代码可以用来生成范围为[1,2.5]的浮点数:

std::uniform_real_distribution dist(1, 2.5);
return dist(*QRandomGenerator::global());

bound(边界范围)

double bounded(double highest)
quint32 bounded(quint32 highest)
int bounded(int highest)
quint32 bounded(quint32 lowest, quint32 highest)
int bounded(int lowest, int highest)

fillRange(填充数组)

void fillRange(UInt *buffer, qsizetype count)
void fillRange(UInt (&)[N] buffer = ...)

generate(产生随机数)

quint64 generate64()
quint32 generate()
void generate(ForwardIterator begin, ForwardIterator end)
double generateDouble()

04. 程序示例

#include <QCoreApplication>
#include <QTime>
#include <QRandomGenerator>
#include <QDebug>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //方法一:已经被废弃,不建议使用
    //设置随机种子
    qsrand(QTime::currentTime().msec());

    //生成10以内的随机数
    qDebug() << qrand() % 10;


    // 方法二: 最新退出的方法 推荐使用
    //生成一个0和10之间的整数
    qDebug() << QRandomGenerator::global()->bounded(10);

    //生成一个0和10.123之间的浮点数
    qDebug() << QRandomGenerator::global()->bounded(10.123);

    //生成一个10和15之间的整数
    qDebug() << QRandomGenerator::global()->bounded(10, 15);


    return a.exec();
}

05. 执行结果

执行结果经经仅供参考,每次执行结果可能不一样。

3
3
4.70804
10

06. 附录

源码下载:【Qt】Qt产生随机数.rar

© 版权声明
THE END
喜欢就支持一下吧
点赞96 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容