gpt4 book ai didi

c++ - 如何重置随机数引擎?

转载 作者:IT老高 更新时间:2023-10-28 21:38:51 25 4
gpt4 key购买 nike

我正在尝试使用 C++11 方法生成随机数:

#include <random>
#include <functional>
#include <iostream>

int main(int argc, char *argv[])
{
std::normal_distribution<double> normal(0, 1);
std::mt19937 engine; // Mersenne twister MT19937
auto generator = std::bind(normal, engine);

int size = 2;

engine.seed(0);
normal.reset();
for (int i = 0; i < size; ++i)
std::cout << generator() << std::endl;

std::cout << std::endl;

engine.seed(1);
normal.reset();
for (int i = 0; i < size; ++i)
std::cout << generator() << std::endl;

std::cout << std::endl;

engine.seed(0);
normal.reset();
for (int i = 0; i < size; ++i)
std::cout << generator() << std::endl;

return 0;
}

输出是:

0.13453
-0.146382

0.46065
-1.87138

0.163712
-0.214253

这意味着第一个和第三个序列并不相同,即使它们以相同的数字作为种子。请问,我做错了什么?是

std::normal_distribution<double>

只是数学意义上的函数(确定性地从 x 中产生 y)还是我遗漏了什么?如果只是一个函数,那么reset方法实际上是做什么的呢?

最佳答案

您正在绑定(bind)引擎和分发,因此以下重置调用不会影响绑定(bind)功能。

解决方案是将引用绑定(bind)到引擎和发行版

auto generator = std::bind(std::ref(normal), std::ref(engine));

关于c++ - 如何重置随机数引擎?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10991607/

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