How to use MPFR from Fortran

Credit: thanks to Olivier Cessenat (CEA) for his help.

First, create a C file, say crexp.c:

#include <mpfr.h>
double exp_(double *x) {
  double y ;
  mpfr_t z ;
  mpfr_init2 (z, 53);
  mpfr_set_d(z, *x, GMP_RNDN) ;
  mpfr_exp(z, z, GMP_RNDN) ;
  y = mpfr_get_d(z, GMP_RNDN) ;
  mpfr_clear(z) ;
  return(y) ;
}
Then, create a Fortran program, say toto.f90:
program toto
  real(kind=8) :: x, y
  real(kind=8),external :: exp
  x = 1.D0
  y = exp(x)
  print*,'y=',y
end program toto
Finally, compile with:
gfortran -c toto.f90 -o toto.o
gcc -c crexp.c -o crexp.o
gfortran -o a.out toto.o crexp.o -lmpfr
./a.out