gpt4 book ai didi

c++ - 在 C++ 中播种随机数的问题

转载 作者:太空狗 更新时间:2023-10-29 20:11:35 27 4
gpt4 key购买 nike

我使用了以下代码(从网络某处复制)并设法生成了一些随机数数组。

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?它应该可以正常工作,但作为解决方法,您可以使用当前时间为 mt19937 播种,就像使用 srand 一样。

std::mt19937 gen(static_cast<std::mt19937::result_type>(std::time(nullptr)));

关于c++ - 在 C++ 中播种随机数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32498962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com