我使用了以下代码(从网上复制而来),成功生成了一些随机数的数组。
问题在于输出总是相同的,所以我认为它没有被适当地种子化。然后我从网上找到了下面的代码,但它在我的计算机上不起作用(我总是得到运行时错误)。
上述代码有什么问题?如何使我的代码具有随机性,以便每次运行时得到不同的输出?此外,对于第一个代码,是否使用了线性同余算法?如何使用“更好”的算法,比如Mersenne Twister (mt19937)?
谢谢。
std::default_random_engine generator;
std::uniform_real_distribution<double> distribution(0,1);
int N;
std::cout<< "Please enter the number of disks to be generated: ";
std::cin>> N;
// generates N pairs of coordinates
double** R;
R = new double* [N];
for (int i=0; i<N; i++) {
R[i] = new double [3];
for (int j=0; j<3; j++) {
R[i][j] = distribution(generator);
}
}
问题在于输出总是相同的,所以我认为它没有被适当地种子化。然后我从网上找到了下面的代码,但它在我的计算机上不起作用(我总是得到运行时错误)。
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(1, 2);
for (int n = 0; n < 10; ++n) {
std::cout << dis(gen) << ' ';
}
std::cout << '\n';
上述代码有什么问题?如何使我的代码具有随机性,以便每次运行时得到不同的输出?此外,对于第一个代码,是否使用了线性同余算法?如何使用“更好”的算法,比如Mersenne Twister (mt19937)?
谢谢。
std::vector<std::vector<double> >
是一个二维向量。 - ForEveR