gpt4 book ai didi

c++ - 在 c++11 中全局修复种子

转载 作者:行者123 更新时间:2023-12-01 23:19:56 28 4
gpt4 key购买 nike

我正在尝试使用新的 c++ <random>具有全局固定种子的 header 。这是我的第一个玩具示例:

#include <iostream>
#include <random>
int morerandom(const int seednum,const int nmax){
std::mt19937 mt;
mt.seed(seednum);
std::uniform_int_distribution<uint32_t> uint(0,nmax);
return(uint(mt));
}
int main(){
const int seed=3;
for (unsigned k=0; k<5; k++){
std::cout << morerandom(seed,10) << std::endl;
}
return 0;
}

所以问题是:如何修复 main() 中的种子并获得可重复的输出 morerandom()

也就是说,我需要调用morerandom()很多( k 会很大),但这些随机数应始终使用相同的 seed 来绘制。我想知道定义整个 block 是否可能/更有效:

std::mt19937 mt;
mt.seed(seednum);

在 main 中,只需传递 mtmorerandom() 。我试过了:

#include <iostream>
#include <random>
int morerandom(const int nmax)
{

std::uniform_int_distribution<uint32_t> uint(0,nmax);
return(uint(mt));
}


int main()
{
const int seed=3;
std::mt19937 mt;
mt.seed(seed);
for (unsigned k=0; k<5; k++)
{

std::cout << morerandom(10) << std::endl;
}

return 0;
}

但是编译器提示:

error: ‘mt’ was not declared in this scope return(uint(mt));

最佳答案

解决方案 1

#include <iostream>
#include <random>

int morerandom(const int nmax, std::mt19937& mt)
// ^^^^^^^^^^^^^^^^
{
std::uniform_int_distribution<uint32_t> uint(0,nmax);
return(uint(mt));
}

int main()
{
const int seed=3;
std::mt19937 mt;
mt.seed(seed);
for (unsigned k=0; k<5; k++)
{
std::cout << morerandom(10, mt) << std::endl;
// ^^
}

return 0;
}

解决方案 2

#include <iostream>
#include <random>

std::mt19937 mt;
// ^^^^^^^^^^^^^

int morerandom(const int nmax)
{
std::uniform_int_distribution<uint32_t> uint(0,nmax);
return(uint(mt));
}

int main()
{
const int seed=3;
mt.seed(seed);
for (unsigned k=0; k<5; k++)
{
std::cout << morerandom(10) << std::endl;
}

return 0;
}

关于c++ - 在 c++11 <random> 中全局修复种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25644465/

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