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

标签 c++ c++11 random exponential-distribution

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/

相关文章:

algorithm - 理解寻找随机数的算法

c++ - C++中智能指针的悬挂引用

c++11 - c++ normal_distribution 在不同平台上给出不同的结果

c++ for循环优化问题

c++ - 类型 'std::istream*' 和 'char' 到二进制 'operator>>' 的无效操作数

c++11 - 枚举值需要多少位?

java - 生成随机数字对列表时如何避免重复?

swift - 确定何时随机调用函数的最佳方法

c++ - 在 C++ 下处理 Unicode 字符串的最佳多平台方式是什么?

C++ 引用其他项目中的文件