2016-04-28 8 views
-1

Ich benutze rand und srand von cstdlib und g ++ als Compiler. Ich spielte herum und versuchte einige Pseudozufallszahlen zu erzeugen, und ich erhielt einige unerwartete Verzerrungsergebnisse. Ich war neugierig, also schrieb ich eine einfache Funktion. Das erwartete Verhalten wäre, dass eine Zufallszahl zwischen 1 und 10 erzeugt und ausgedruckt werden würde, um 100x zu screenen. Der erwartete Wert des Durchschnitts sollte 5 sein. Wenn ich diese Funktion jedoch ausführe, wird eine einzelne Zufallszahl zwischen 1 und 10 generiert und 100x gedruckt, wobei der Durchschnitt der Zufallszahl entspricht, die generiert wurde.C++ und rand/srand verhalten sich nicht wie erwartet

#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; 
} 

Wenn die anfängliche Rückkehr aus bs = 7 7 es für die Dauer der Schleife bleiben wird und jedes Mal, bs() aufgerufen wird. Die Ausgabe wird 7 100x selbst hinzugefügt und der Durchschnitt wird gleich sein keuchen 7. Was ist hier los?

Antwort

0

Der Seed sollte nur einmal angewendet werden. Verschieben Sie die

srand(time(0)); 

zu main vor der Schleife.

+0

Yup, das hat es gelöst. Vielen Dank! – beastface5000