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()的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM