加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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)));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读