Replace gmpxx library with mpreal library based on mpfr
SUMMARY
The GMPField
class is now based on the mpfr::mpreal
class from the MPFR-C++ library
Motivation
The old gmpcxx library lacks some implementations, e.g. of numeric_limits
. Since the GMP library also recommends to switch to the (more up-to-date) library MPFR (See https://gmplib.org/manual/Floating_002dpoint-Functions.html and https://www.mpfr.org) for floating point arithmetic, I switched the backend from GMP to MPFR. The C++ wrapper is chosen to be MPFR-C++ (http://www.holoborodko.com/pavel/mpfr/) since it is used in several other libraries, e.g. Eigen, boost::multiprecision. It can be used as a floating-point type in the Eigen linear algebra library and has much better support for std::numeric_limits
.
Since in the Dune GMPField
implementation, the precision is given by a template parameter, some numeric_limits
constants can be filled with concrete values.
Discussion
I have not changed the name of the Dune wrapper GMPField
since, at the end, it is also related to the GMP library. It could be discussed whether it is better to change the name, e.g.
MPFRField
MPField
MPFloat
MultiPrecision
FloatMP
FloatMultiPrecision
or something similar.
Decision: We use the old name GMPField
.
The MPFR and MPFR-C++ library are available in the Ubuntu and Debian repositories (libmpfr-dev and libmpfrc++-dev).
-
Add packages for libmpfr and libmpfrc++ to docker images for the CI system.