c中随机播种的问题

c中随机播种的问题,第1张

概述我使用以下代码(从Web上的某处复制)并设法生成一些随机数组. 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: " 我使用以下代码(从Web上的某处复制)并设法生成一些随机数组.

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中随机播种的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216836.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存