C++ Qt rand()不';我不能正常工作
我想显示1000个从0到99999的随机数。但这有一个奇怪的问题。它显示了1000个数字,但没有一个比aprox更高。35 000. 为什么呢C++ Qt rand()不';我不能正常工作,c++,qt,c++11,random,numbers,C++,Qt,C++11,Random,Numbers,我想显示1000个从0到99999的随机数。但这有一个奇怪的问题。它显示了1000个数字,但没有一个比aprox更高。35 000. 为什么呢 #include "mainwindow.h" #include <QApplication> #include <QDebug> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show();
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
int ran;
qsrand(qrand());
for (int i=0; i<1000; i++){
ran = qrand() % 100000;
qInfo() << ran;
}
return a.exec();
}
#包括“mainwindow.h”
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
主窗口w;
w、 show();
int-ran;
qsrand(qrand());
对于(int i=0;i问题
实际上是32767。本例中的行为与标准相同:
返回介于0和RAND_MAX
之间的伪随机整数
以及文件中的类似声明:
返回介于0和之间的值RAND_MAX
(在
和
中定义)
显然,在您的情况下,RAND_MAX
等于32767(2)⁵ – 1)
解决方案
解决方案是使用C++11随机数生成器:
#include <random>
// ...
std::random_device rd;
std::mt19937 mt(rd());
const int min = 0;
const int max = 99999;
std::uniform_int_distribution<int> ds(min, max);
for (int i = 0; i < 1000; ++i) {
qDebug() << ds(mt);
}
#包括
// ...
std::随机_装置rd;
标准:mt19937 mt(rd());
常数int min=0;
常数int max=99999;
标准:均匀分布ds(最小值、最大值);
对于(int i=0;i<1000;++i){
我的机器上的qDebug()输出看起来正常(例如74537、9993、54396出现在那里)。2^15是“大约35000”。它看起来像是在处理有符号的16位整数。那么我如何更改它呢?对于32位整数上的ex?qrand()
函数返回一个介于0和RAND_MAX(在和中定义)之间的值RANDXMAX CONST是编译器依赖的,所以最好使用C++中的新随机函数11@ramzes2我使用了normal rand()函数和srand(time(NULL))但它没有工作。结果是一样的。是的,我同意你的看法。这是个问题。在应用c++11中的这些新随机函数后一切正常。谢谢!