我正在尝试对一类特别讨厌的函数进行数值积分,最初我使用的是 GSL,但舍入误差对于我想要的公差来说太大了。在快速谷歌搜索任意精度正交库之后,我找到了 quadpack++,它似乎可以满足我的要求,但我无法让它工作,特别是我似乎无法传递这种形式的函数:
mpf MyClass::foo( mpf t, const mpf_array& fourier ){
// do stuf
}
作为输入,它希望以这种形式:
template<typename Real, class param_t>
class Function : public FtnBase<Real> {
public:
typedef Real defn_t(Real, param_t*);
defn_t& function_;
param_t* params_;
virtual Real operator() (Real x) {return function_(x, params_); }
Function(defn_t& function) : function_(function), params_(0) {}
Function(defn_t& function, param_t* params) : function_(function), params_(params) {}
~Function() {}
};
我对 C++ 很陌生,所以它可能很简单,但我已经尝试了基于Q1和Q2可以想到的指针和 std::bind 的所有组合,但无济于事。对此的任何帮助,或对更好测试和记录的任意精度正交库的建议将不胜感激。