Stl:exponential_distribution - 使用最小值和最大值作为输入参数



您能告诉我如何为exponential_distribution分布创建一个对象吗,其中我只指定该分布中可以作为输入参数的最小值和最大值?

m_generatorDeltaTime = std::exponential_distribution<double>(minDelta, maxDelta);

上面的示例给出了一个错误:(

指数分布只有一个参数,该参数决定了它的形状。

最小值始终为 0,没有最大值。

您可以编写自己的分发对象,并将std::exponential_distribution用作其中的一部分。

template <typename RealType>
struct my_distribution
{
struct param_type : typename std::exponential_distribution<RealType>::param_type
{
RealType min;
RealType max;
};
using result_type = RealType
my_distribution(RealType lambda, RealType min, RealType max) : m_exp(lambda), m_param(lambda, min, max) {}
my_distribution(param_type param) : m_exp(param), m_param(param) {}
template <typename URBG>
result_type operator()(URBG & gen)
{
result_type initial = m_exp(gen);
// some calculation of value here involving m_param.min, m_param.max
return value;
}
template <typename URBG>
result_type operator()(URBG & gen, const param_type & param)
{
result_type initial = m_exp(gen, param);
// some calculation of value here involving param.min, param.max
return value;
}
param_type param() { return m_param; }
void param(const param_type & param) { m_exp.param(param); m_param = param; }
result_type lambda() { return m_exp.lambda(); }
result_type min() { return m_param.min; }
result_type max() { return m_param.max; }
private:
std::exponential_distribution<RealType> m_exp;
param_type m_param;
}

最新更新