Subject: Re: [boost] [Review Request] Multiprecision Arithmetic Library
From: Christopher Kormanyos (e_float_at_[hidden])
Date: 2012-04-07 11:49:11


>> My basic operations (add, sub, mul, div) are on-par or faster

>> for a variety of reasons. For example, I don't allocate---just use
>> std::array "on the stack".

> That's great that they are faster, but what are the precision warranties
> for the following operations: add, sub, mul, div, sqrt?
> Andrii

Andrii,

In our work, we support three floating point back-ends:

        * boost::multiprecision::cpp_dec_float<unsigned Digits10>
        * boost::multiprecision::gmp_float_backend<unsigned Digits10>
        * boost::multiprecision::mpfr_float_backend<unsigned Digits10>The cpp_dec_float back-end is entirely under BPL, whereas the other
two are restricted with GPL. The floating-point infrastructure
also supports *any* floating-point back-end, provided this
adheres to the requirements of the interface.

Each of our back-ends is designed to maintain precision for add, sub, mul, div, sqrt.
After all, these are precision-maintaining algorithms. If, however, you compute a
divergent series or, maybe, a numerical derivative in your own development,
then you might lose precision if the algorithm is ill-conditioned.
This is just like with ordinary float, double, etc.

Actually, I am re-benchmarking this stuff. I would say the
speeds of all supported back-ends are comparable from 30-75 decimal digits
on a 64-bit machine, whereas above 100 decimal digits, the GNU-based
back-ends are faster. So I had better be more precise with performance
comments in the future.

John has provided benchmark results in his documentation.

Best regards, Chris.