2016-04-28 65 views
-1

我使用cstdlib和g ++中的rand和srand作爲編譯器。我在玩弄一些僞隨機數字,並且得到了一些意想不到的偏見結果。我很好奇,所以我寫了一個簡單的函數。預期的行爲將會產生一個介於1到10之間的隨機數字並被打印出來以便屏幕顯示100x。平均值的期望值應該是5.然而,當我運行這個函數時,它將產生一個介於1和10之間的單個隨機數,並將其打印100x,其平均值等於產生的隨機數。C++和rand/srand行爲沒有按預期執行

#include <iostream> 
#include <cstdlib> 
#include <ctime> 

using namespace std; 

float bs(){ 
     float random; 
     srand(time(0)); 
     random = rand() % 10 + 1; 

     return random; 
} 


int main(){ 

     float average; 
     float random; 

     for (int i = 1; i < 101; ++i) 
     { 
       random += bs(); 
       cout << random << endl; 
     } 

     average = random/100; 
     cout << average << endl; 

     return 0; 
} 

如果從BS = 7的初始返回它將停留7爲循環的持續時間和每次BS()被調用。輸出將自己添加到100x,平均值將等於gasp 7.這裏發生了什麼?

回答

0

種子應該只應用一次。將

srand(time(0)); 

設置爲循環前的main。

+0

是的,這解決了它。謝謝! – beastface5000