私はPythonコードをC++に変換しようとしています。コードが行うことは、モンテカルロシミュレーションを実行することです。私はPythonとC++の結果が非常に近いと思っていましたが、面白いことが起こったようです。ここでC++乱数生成とPythonの違い
は、私はPythonで何をすべきかです:ここでは
self.__length = 100
self.__monte_carlo_array=np.random.uniform(0.0, 1.0, self.__length)
は、私はC++で何をすべきかです:
int length = 100;
std::random_device rd;
std::mt19937_64 mt(rd());
std::uniform_real_distribution<double> distribution(0, 1);
for(int i = 0; i < length; i++)
{
double d = distribution(mt);
monte_carlo_array[i] = d;
}
私はその後、乱数生成はPythonとC++の両方の時間を100x5以上走り、これらの乱数を使ってモンテカルロシミュレーションを行います。
モンテカルロシミュレーションでは、しきい値を0.5に設定したので、結果が均一に分散されているかどうかを簡単に確認できます。ここ
モンテカルロシミュレーションが何概念案である:
for(i = 0; i < length; i++)
{
if(monte_carlo_array[i] > threshold) // threshold = 0.5
monte_carlo_output[i] = 1;
else
monte_carlo_output[i] = 0;
}
モンテカルロの長さは、アレイ120であるので、私は、PythonとC++の両方で60の1
Sを見ることを期待します。私は1
の平均数を計算し、C++とPythonの平均数は約60ですが、その傾向は高度に相関していますが、さらに、Pythonの平均数はで、常にC++よりも高いです。
これは私が何か間違って行ったことが原因であるかどうか、あるいは単にC++とPythonのランダム生成メカニズムの違いが原因であるかどうか分かりますか?
[編集] RNG in Pythonもメルセンヌツイスターであることに注意してください19937.
異なる乱数ジェネレータは、異なる乱数セットを提供します。私はあなたがそれを数回(数百回のように)走らせれば、それほど明白な違いはないと思います。 –
これは実際に表示するコードで表示されますか?他の入力がなければなりません。さもなければ、コード間には何の相関もありません!私はバグが他の場所にあると思われます... –
これらの結果の継ぎ目は操作されました... –