我正在尝试将一些 python 代码翻译成 C++。代码的作用是运行蒙特卡罗模拟。我认为 Python 和 C++ 的结果可能非常接近,但似乎发生了一些有趣的事情。
这是我在 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,我希望1
在 Python 和 C++ 中都看到 60 秒。我计算了1
s的平均数,发现虽然C++和Python的平均数在60左右,但是趋势是高度相关的。此外,Python 中的平均数字总是高于C++ 中的。
请问这是因为我做错了什么,还是仅仅是因为 C++ 和 Python 中随机生成机制的不同?
[编辑] 请注意Python 中的 RNG也是 Mersenne Twister 19937。