Использование ускоренного мультиточного оператора вместо константного двойного
У меня есть следующий код для интеграции с помощью библиотеки Boost. Iam попытался изменить двойной оператор на оператор cpp_dec_float_50.
#include <iostream>
#include <boost/numeric/quadrature/adaptive.hpp>
#include <boost/numeric/quadrature/kronrodgauss.hpp>
#include <boost/numeric/quadrature/epsilon.hpp>
#include <boost/math/constants/constants.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
using namespace std;
using boost::multiprecision::cpp_dec_float_50;
namespace quadrature = boost::numeric::quadrature;
double polynomial(int k , int n);
struct f
{
vector<double> poly;
double polysum(double x) const {
double s = 0;
double p = 1;
for (int i = 1; i < poly.size(); i++) {
p = p * x;
s += p * poly[i];
}
return s;
}
double operator()(double x)const {
return polysum(x) * log(x) / (1 + x);
}
};
int main()
{
int n = 2;
f fun;
double p = 0;
for (int i = 0; i <= n; i++)
{
p = polynomial(i, n);
fun.poly.push_back(p);
}
double answer, error_estimate;
quadrature::adaptive().relative_accuracy(1e-5).absolute_accuracy(1e-7)
(fun, 0., 1., answer, error_estimate);
cout << "ans" << answer << endl;
return 0;
}
double polynomial(int k , int n)
{
return k;
}
если он изменился на:
cpp_dec_float_50 operator () (cpp_dec_float_50 x) const {
и измените все связанные вещи на cpp_dec_float_50, тогда появится список ошибок, смотрите их здесь
Кто-нибудь может это исправить?
для пользователей, у которых нет библиотеки Boost Quadrature, вы можете скачать ее здесь https://github.com/coolfluid/coolfluid3/tree/master/include/boost/numeric