正規分布から乱数を生成しようとしています。コードの場合:
normal(eng)
main()に表示され、プログラムは正常に動作します。ただし、別の関数から呼び出された場合、mainからの次の呼び出しは、以前に生成されたものと同じ値を返します。以下はこれを説明するいくつかのコードです。出力の最初の数行は次のとおりです。
-0.710449
-0.710449
0.311983
0.311983
1.72192
1.72192
0.303135
0.303135
0.456779
0.456779
なぜこれが起こるのか誰かが知っていますか?
コンパイラは、Windowsではgcc4.4.1です。
#include <iostream>
#include <cmath>
#include <ctime>
#include <tr1/random>
typedef std::tr1::ranlux64_base_01 Engine;
//typedef std::tr1::mt19937 Engine;
typedef std::tr1::normal_distribution<double> Normal;
double random_normal(Engine eng, Normal dist) {
return dist(eng);
}
int main ( int argc, char** argv ) {
Engine eng;
eng.seed((unsigned int) time(NULL));
Normal normal(0,1);
for (int i = 0; i < 100; i++)
{
std::cout << random_normal(eng, normal) << std::endl;
std::cout << normal(eng) << std::endl;
}
return 0;
}