2016-04-28 15 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からの最初の復帰の場合、ループの持続時間の間、およびbs()が呼び出されるたびに7に留まります。出力は、それ自身が100xに加算され、平均値はとなります。 7.ここでは何が起こっていますか?

答えて

0

シードは1回だけ適用する必要があります。

srand(time(0)); 

をループの前に移動します。

+0

うん、それはそれを解決しました。ありがとう! – beastface5000

関連する問題