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 coordinatesdouble** 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)这样的“更好”的算法?
谢谢
解决方法 default_random_engine是实现定义的.它没有指定它将使用哪个算法.你得到哪个runtime_error?它应该正常工作,但作为解决方法,您可以使用srand为当前时间播种mt19937.
std::mt19937 gen(static_cast<std::mt19937::result_type>(std::time(nullptr)));总结
以上是内存溢出为你收集整理的c中随机播种的问题全部内容,希望文章能够帮你解决c中随机播种的问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)