首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++如何设置`std::exponential_distribution`对象的参数?

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

Stack Overflow用户
提问于 2015-10-26 23:56:03
回答 2查看 725关注 0票数 2

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

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

我有一个发行版:std::exponential_distribution<double> exp_dis(lambda);

从一开始,lambda就是任何值。0.01.0是可以使用的值。

我在使用指针的线程函数中引用此分布。(我对每个线程函数都有一个独立的发行版,以避免数据争用情况。)

lambda的值是在循环中计算的,并且可以在每次执行循环时更改。

因此,我想知道如何在指数分布中“设置”参数lamda的值。

通过一些快速搜索,我认为我应该能够使用成员函数param()来实现这一点,但是我不能确定要使用的确切语法。

这不起作用:

代码语言:javascript
复制
// Pointer to exponential distribution object
exp_dis_p->param(lambda);
EN

回答 2

Stack Overflow用户

发布于 2015-10-27 12:29:13

您还可以更改指数分布的lambda,如下所示。

代码语言:javascript
复制
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);
}

并可以使用它,如下所示

代码语言:javascript
复制
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类型,那么您也可以执行以下操作。

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2015-10-27 00:03:15

通过以下设置,您应该能够设置新的lambda:

代码语言:javascript
复制
decltype(exp_dis_p->param()) new_lambda (lambda);
exp_dis_p->param(new_lambda);

这是我已经使用了一段时间的代码。就像Praetorian在注释中解释的那样,param()类型与父类型具有相同的参数。

我在一个document about the C++ standardizing里找到了这个

对于D的每个接受与分布参数对应的参数的构造函数,P应具有相应的构造函数,该构造函数符合相同的要求,并采用数量、类型和默认值相同的参数。此外,对于D的每个返回与分布参数对应的值的成员函数,P应具有相同名称、类型和语义的对应成员函数。

其中D是分布类,P是由D的关联param_type命名的类型。

decltype的功能很简单:

检查实体的声明类型或查询表达式的类型和值类别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33350164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档