On 16/08/2020 21:15, Anirban Pal via Boost-users wrote:
Hello,
I’m using the tanh-sinh integrator to integrate a simple function f(x) = 0.26*x from 3.0 to 4.0. The exact result is 0.91. With the integrator I’m getting a result accurate to only 10^-18 with cpp_bin_float_100 multiprecision.
You have the double precision constant 0.26 in your code, and since this is an inexact binary value, everything that depends on that constant is inherently limited to double precision. Try constructing it as Real(26) / 100.
|typedef boost::multiprecision::cpp_bin_float_100 Real; int main(int argc, char **argv) { using namespace boost::math::quadrature; using namespace std::placeholders; tanh_sinh<Real> integrator; auto f2 = [](Real x) { Real a = 0.26; return x*a; }; std::cout << std::setprecision(std::numeric_limits<Real>::max_digits10) << "Comp.: " << integrator.integrate(f2, (Real) 3.0, (Real) 4.0) << std::endl; return 0; } | I'm getting an output of
Comp.: 0.9100000000000000310862446895043831318616867065429687499999999999999999999999999999999999999999999999429
which I'm a bit curious about. I was wondering if I can improve the result.
Thank you.
-- Anirban Pal
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://lists.boost.org/mailman/listinfo.cgi/boost-users
-- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus