我正在尝试在main()中调用的函数中使用std :: uniform_real_distribution。
我在main()中为生成器播种如下:
unsigned seed =
std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine generator (seed);
std::uniform_real_distribution<double> distribution(0.0,1.0);
在主要的电话中进一步说:
double number = distribution(generator)
当我需要随机数时。
问题是我还需要(数百万) 函数中的随机数。
想象一下我在main()中调用的函数:
int main(){
void function(){
number = distribution(generator)
}
return 0;
}
怎么做?如何“访问”函数中的随机数生成器。
非常感谢!答案 0 :(得分:0)
你可以用它来制作一个功能。我建议使用std::mt19937
作为随机数生成器并使用(至少)std::random_device
播种。
这样的事情:
inline
double random_number(double min, double max)
{
// use thread_local to make this function thread safe
thread_local static std::mt19937 mt{std::random_device{}()};
thread_local static std::uniform_real_distribution<double> dist;
using pick = std::uniform_real_distribution<double>::param_type;
return dist(mt, pick(min, max));
}
int main()
{
for(int i = 0; i < 10; ++i)
std::cout << i << ": " << random_number(2.5, 3.9) << '\n';
}
<强>输出:强>
1: 3.73887
2: 3.68129
3: 3.41809
4: 2.64881
5: 2.93931
6: 3.15629
7: 2.76597
8: 3.55753
9: 2.90251