C++ 标准库 - 随机数生成和分布:如何设置指数分布的参数?
我有一个程序,需要指数分布的随机数。我正在使用 C++11 随机数和分布库支持。
我有一个发行版:std::exponential_distribution<double> exp_dis(lambda);
lambda
可以是任何开始值。 0.0
或1.0
是可以使用的值。
我使用指针在线程函数中引用此分布。 (我为每个线程函数都有一个独立的分布,以避免数据竞争情况。)
lambda
的值在循环内计算,并且每次执行循环时都可以更改。
所以我想知道参数lamda
的值如何可以在指数分布内“设置”。
通过一些快速搜索,我认为我应该能够使用成员函数 param()
来做到这一点,但我无法弄清楚要使用的确切语法。
这不起作用:
// Pointer to exponential distribution object
exp_dis_p->param(lambda);
最佳答案
您还可以更改 lambda
指数分布如下。
template<typename T>
void set_new_lambda(std::exponential_distribution<T> *exp_dis, T val)
{
typename std::exponential_distribution<T>::param_type new_lambda(val);
exp_dis->param(new_lambda);
}
并且可以按如下方式使用它
int main()
{
std::exponential_distribution<double> exp_dis(0.1);
std::cout<<exp_dis.lambda()<<'\n';
set_new_lambda(&exp_dis,0.2);
std::cout<<exp_dis.lambda()<<'\n';
return 0;
}
或者如果您只处理 double 类型,那么您也可以执行以下操作。
int main()
{
std::exponential_distribution<double> exp_dis(0.1);
auto ptr = &exp_dis;
std::exponential_distribution<double>::param_type new_lambda(0.2);
ptr->param(new_lambda);
}
你可以看到param_type
对于分发可以声明为 std::exponential_distribution<double>::param_type
.
关于C++ 如何设置 `std::exponential_distribution` 对象的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33350164/