是C++;正态分布与MATLAB';randn是一致的吗? 我使用MelShan-Wrutter,以便在Matlab和C++中的项目之间具有一致的随机值。但是当使用randn或C++11的正态分布时,我无法得到一致的正态分布伪随机值

是C++;正态分布与MATLAB';randn是一致的吗? 我使用MelShan-Wrutter,以便在Matlab和C++中的项目之间具有一致的随机值。但是当使用randn或C++11的正态分布时,我无法得到一致的正态分布伪随机值,c++,matlab,c++11,statistics,normal-distribution,C++,Matlab,C++11,Statistics,Normal Distribution,下面是C++: void main() { unsigned int mersenneSeed = 1977; std::mt19937_64 generator; // it doesn't matter if I use the 64 or the std::mt19937 generator.seed(mersenneSeed); std::normal_distribution<double> normal; // default is 0 m

下面是C++:

void main()
{
    unsigned int mersenneSeed = 1977;
    std::mt19937_64 generator; // it doesn't matter if I use the 64 or the std::mt19937
    generator.seed(mersenneSeed);
    std::normal_distribution<double> normal; // default is 0 mean and 1.0 std
    double temp = normal(generator); 
        // results 1.4404780513814264 for mt19937_64 and 1.8252033038258377 for mt19937
}
我正在使用Matlab2013b和Visual Studio Express 2013。C++11正态分布是否有问题?

本身只生成32位整数随机数。对于您观察到的差异,最可能的解释是如何将这些均匀分布的整数转换为正态分布的双精度浮点数

由于的文档没有解释此转换,并且源代码也不可用(它是一个内置函数),因此如果没有反向工程,很难对其进行更多说明。(根据凯西的评论,同样的东西对于C++方面似乎是成立的)

实现一致性的最简单方法可能是在C++或MATLAB中生成随机数,保存结果,并根据需要加载它们。另一种方法是在C++中用MATLAB编写随机数函数(C++使用<代码>标准分布< /COD>),在Matlab中使用这个函数而不是代码> RANND .< /P>,分布的确切机制没有被标准指定,所以它们的结果不能保证便携式。(更不用说保证可移植到Matlab;).rng和您的代码的种子机制可能也完全不同。您是否创建了要从Matlab调用的mex代码?是否有理由希望相同种子值的输出相同?此外,由于您从正态分布生成随机变量,我猜C++11实现了什么规格不使用这是默认的MATLAB。@霍奇勒2队竞争的软件解决方案将最好地解决一个大的计算问题。一个团队写他们的解决方案在Matlab和其他在C++中。在测试算法,这将是好的,有相同的数据,以冲出边缘情况。

rng(1977) % default Matlab uses mersenne twister
randn()   % default is 0 mean and 1.0 std