c中随机播种的问题
发布时间:2020-12-16 09:59:05 所属栏目:百科 来源:网络整理
导读:我使用以下代码(从Web上的某处复制)并设法生成一些随机数组. std::default_random_engine generator;std::uniform_real_distributiondouble distribution(0,1);int N;std::cout "Please enter the number of disks to be generated: ";std::cin N;// generat
我使用以下代码(从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 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)这样的“更好”的算法? 谢谢 解决方法
default_random_engine是实现定义的.它没有指定它将使用哪个算法.
你得到哪个runtime_error?它应该正常工作,但作为解决方法,您可以使用srand为当前时间播种mt19937. std::mt19937 gen(static_cast<std::mt19937::result_type>(std::time(nullptr))); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |