我正在尝试提出等效的方法来在MATLAB和C ++中生成统一的随机变量。在MATLAB中,很容易使用生成器rng(0, 'twister')
来使用种子0和Marsenne Twister引擎。然后,例如,可以使用rand(5,1)
生成5个统一的随机数。根据MATLAB的rand
文档,它使用mt19937
引擎。
我正在努力用C ++复制它。我使用了以下代码:
#include <iostream>
#include <cmath>
#include <random>
static std::random_device rd;
static std::tr1::mt19937 rand_mt(rd());
int main(void)
{
rand_mt.seed(0);
for (int i = 0;i < 5;i++)
{
std::cout << (double)rand_mt() / ((double)rand_mt.max() -
(double)rand_mt.min()) << std::endl;
}
return 0;
}
这是一个很长的路,但是我没有从MATLAB和C ++获得相同的输出。我需要解决上述代码的任何问题?还是在C ++中有替代的等效实现?