QT qrand 隨機函式不隨機?

2021-10-06 20:47:29 字數 1256 閱讀 4864

在做乙個qt的課程設計時,需要乙個產生隨機數(四位不同數字的隨機數)的方法,查了一下資料發現很簡單呼叫一下qrand()方法即可。確實也能產生隨機數但是發現乙個bug就是每次重啟程式發現每次產生的隨機數都是相同的。

**如下:

//獲取隨機數

int mainwindow::

generaterandomnumber()

;int four=0;

int temp=10;

while

(four<

1000)}

for(

int i=

0;i<

10;i++

)return four;

}

不是說好了是隨機數嗎?

又仔細翻閱了資料發現如果我們僅僅只是呼叫該函式來生成隨機數,那麼每次得到的隨機數都將是相同的,這是因為qt生成的隨機數嚴格來說是乙個「偽隨機」,它的產生是根據隨機數種子計算得到的。如果種子相同,那麼所得到的隨機數也是相同的。在上面的**中由於每次的隨機數種子是一樣的導致了每次程式重啟後產生的隨機數都是相同的。

為了使我們的隨機數看起來更為「隨機」一些,我們在每次獲取隨機數之前都需要初始化乙個不同的隨機數種子,這就需要用到qsrand()函式,該函式只有乙個整型引數,即要設定的隨機數種子。

void qsrand(uint seed);

int qrand();

qt生成隨機數和c語言差距不大,c語言用srand()和rand(),qt是用qsrand()和qrand();

qt生成隨機數的格式是:

qsrand

(qtime(0

,0,0

).secsto

(qtime::

currenttime()

));qrand()

;

只需將上面的**修改即可:

//獲取隨機數

int mainwindow::

generaterandomnumber()

;int four=0;

int temp=10;

while

(four<

1000)}

for(

int i=

0;i<

10;i++

)return four;

}

QT qrand 隨機函式

在qt中,生成隨機數的函式為 qrand 該函式是標準c 函式 rand 的執行緒安全版本。如果我們僅僅只是呼叫該函式來生成隨機數,那麼每次得到的隨機數都將是相同的,這是因為qt生成的隨機數嚴格來說是乙個 偽隨機 它的產生是根據隨機數種子計算得到的。如果種子相同,那麼所得到的隨機數也是相同的。因此,...

python隨機漫步點呈直線 分布不隨機

第一次發部落格 表達一下我的疑惑 randomwalk from random import choice class randomwalk def init self,num points 5000 self.num points num points self.x values 0 self.y...

C 隨機數不隨機怎麼回事兒

謹記srand 不要呼叫兩次或兩次以上。void main for int i 0 i 10 i srand unsigned time null cout 這樣呼叫的時候,因為cpu高速的關係,呼叫的srand unsigned time null 生成的種子數一樣。導致rand 產生的隨機數也一...