Hello everyone,
I would like to announce MPFR_wrap.jl, a set of wrappers around MPFR, a multiple-precision floating-point library for in-place computation. MPFR_wrap.jl
does not introduce new types and makes instead use of Julia’s BigFloat
s.
Example
Most operations defined in Base on BigFloat
s however allocate temporary variables. Consider the computation of sqrt(a+b)
: a new BigFloat
is allocated to hold the result of a+b
. Using MPFR_wrap
, one can do
add!(a, a, b) # a ← a + b
sqrt!(a, a) # a ← sqrt(a)
provided the content of a
can be overwritten.
Installation
The package is not registered yet: if you want to give it a try, at the package prompt (“]”), type
(@v1.4) pkg> add https://github.com/mzaffalon/MPFR_wrap.jl
This is my first public module: feedback is welcome.
Background
This module was born out of curiosity to implement the computation of pi using iterative methods as explained in this review by David H. Bailey and to compare with the timings of table 3.
The in-place computation of pi to 100_000 digits takes 130ms on my laptop, compared to 350ms using the operations defined in Base; a substantial difference between the two methods can be seen when one consider allocations: 400 kB compared to 12 MB.
Disclaimer: I am not an expert in the computation of pi.