gpt4 book ai didi

C++ 如何设置 `std::exponential_distribution` 对象的参数?

转载 作者:搜寻专家 更新时间:2023-10-31 02:19:53 24 4
gpt4 key购买 nike

C++ 标准库 - 随机数生成和分布:如何设置指数分布的参数?

我有一个程序需要指数分布的随机数。我正在使用 C++11 随机数和分布库支持。

我有一个分布:std::exponential_distribution<double> exp_dis(lambda);

lambda是任何开始的值。 0.01.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/

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