HighPrecision Software Directory
Update: 16 Sep 2014
This web site (see software package links below) contains the LBNL
doubledouble precision, quaddouble precision and arbitrary precision
(also termed "multiprecision" or "multiple precision") software, which
was written over a period of several years by David H. Bailey (LBNL),
Yozo Hida (U.C. Berkeley), Xiaoye S. Li (LBNL), Brandon Thompson
(formerly of U.C. Berkeley, now at Synopsis), Karthik Jeyabalan (formerly
at LBNL, now at Cornell) and Alex Kaiser (LBNL, now at NYU).
Here are links to some of the authors' websites:
*** IMPORTANT NOTE ***
By downloading or using this software you are agreeing to the modified
BSD license that is in file
BSDLBNLLicense.doc and in the packages below. If you wish to
use the software for commercial purposes please contact the LBNL
Technology Transfer Department at TTD@lbl.gov or call 5102866457.
Please send any comments or questions for this site to:
Here are the software packages that are available:
 ARPREC (C++/Fortran90 arbitrary precision package)
Unixbased systems (including Apple Macintosh systems):
arprec2.2.17.tar.gz
Before downloading or installing this software, please read
BSDLBNLLicense.doc
(which contains license information) and the README file.
This package supports a flexible, arbitrarily high level of
numeric precision  the equivalent of hundreds or even thousands of
decimal digits (up to approximately ten million digits if needed).
Special routines are provided for extrahigh precision (above 1000
digits). The entire library is written in C++. Highprecision real,
integer and complex datatypes are supported. Both C++ and Fortran90
translation modules are also provided that permit one to
convert an existing C++ or Fortran90 program to use the library with
only minor changes to the source code. In most cases only the type
statements and (in the case of Fortran90 programs) read/write
statements need be changed. Six implementations of PSLQ (one, two
and threelevel, regular and multipair) are included, as well as
three highprecision quadrature programs. New users are encouraged to
use this package, rather than MPFUN90 or MPFUN77 (see below).
This verion of the ARPREC package now includes "The Experimental
Mathematician's Toolkit", which is available as the program "mathtool"
in the subdirectory "toolkit". This is a complete interactive
highprecision arithmetic computing environment. One enters
expressions in a Mathematicastyle syntax, and the operations are
performed using the ARPREC package, with a level of precision that can
be set from 100 to 1000 decimal digit accuracy. Variables and vector
arrays can be defined and referenced. This program supports all basic
arithmetic operations, common transcendental and combinatorial
functions, multipair PSLQ (one, two or threelevel versions),
highprecision quadrature, i.e. numeric integration (Gaussian, error
function or tanhsinh), and summation of series.
 QD (C++/Fortran90 doubledouble and quaddouble package)
Unixbased systems (including Apple Macintosh systems):
qd2.3.15.tar.gz
Before downloading or installing this software, please read
BSDLBNLLicense.doc
(which contains license information) and the README file.
This package supports both a doubledouble datatype
(approx. 32 decimal digits) and a quaddouble datatype (approx. 64
decimal digits). The computational library is written in C++. Both
C++ and Fortran90 highlevel language interfaces are provided to
permit one to use convert an existing C++ or Fortran90 program to use
the library with only minor changes to the source code. In most cases
only a few type statements and (for Fortran90 programs) read/write
statements need to be changed. PSLQ and numerical quadrature programs
are included.

MPFUN90 (Fortran90 arbitrary precision package)
Unixbased systems (including Apple Macintosh systems):
mpfun90.tar.gz (version date 20100825)
Before downloading or installing this software, please read
BSDLBNLLicense.doc
(which contains license information) and the README file.
This package is similar to the ARPREC package, except that it
is written exclusively in Fortran90 (i.e., no C++). As with the
ARPREC package, Fortran90 translation modules are also provided that
permit one to convert an existing Fortran90 program to use the
library with only minor changes to the source code. The MPFUN90
package was recently revamped and improved to be completely
compatible, at the Fortran user level, with the ARPREC package. In
other words, a highlevel Fortran90 user program that works with the
MPFUN90 software should also work with the ARPREC package. For
instance, the F90 quadrature and PSLQ programs mentioned above that
are included with the ARPREC package also work with MPFUN90, and are
included in the MPFUN90 package. In addition, the Experimental
Mathematician's Toolkit now works with MPFUN package as well.

DDFUN90 (Fortran90 doubledouble package)
Unixbased systems (including Apple Macintosh systems):
ddfun90.tar.gz (version date 20050311)
Before downloading or installing this software, please read
BSDLBNLLicense.doc
(which contains license information) and the README file.
This package contains software for performing doubledouble arithmetic
(approximately 32 decimal digits). It is similar to the qd package
above in functionality, and in fact, an application program written
for one should be compatible with the other. However this is entirely
written in Fortran90.
NOTE: This code is designed for systems with 64bit IEEE arithmetic.
On Intel and AMDbased systems, where 80bit arithmetic is the
default, this is not guaranteed to work correctly in all cases. The
QD package has a subroutine call to turn off the 80bit format, but
that is not yet available for DDFUN90.

DSFUN90 (Fortran90 doublesingle package)
Unixbased systems (including Apple Macintosh systems):
dsfun90.tar.gz (version date 20050311)
Before downloading or installing this software, please read
BSDLBNLLicense.doc
(which contains license information) and the README file.
This package contains software for performing doublesingle arithmetic (approximately 15 decimal digits). It is entirely written in Fortran90. It is targeted to systems, such as game systems, that do not support IEEE 64bit floatingpoint arithmetic.

MPFUN77 (Fortran77 arbitrary precision package)
Unixbased systems (including Apple Macintosh systems):
mpfun77.tar.gz
This package supports an arbitrarily high level of numeric
precision  the equivalent of hundreds or even thousands of decimal
digits (up to approximately ten million digits if needed). Special
routines are provided for extrahigh precision (above 1000 digits).
Highprecision real, integer and complex datatypes are supported. A
translator program is also provided that permits one to convert an
existing Fortran77 program to use the library, by inserting special
comments in the source code.
NOTE: This package is now considered obsolete, and is no longer actively
supported. New users are strongly encouraged to use either the
MPFUN90 package or (even better) the new ARPREC package.

RANDOM (Fortran90 pseudorandom number generator based on
provably normal number theory)
Unixbased systems (including Apple Macintosh systems):
random20080827.tar.gz (version date 20080827)
Before downloading or installing this software, please read
BSDLBNLLicense.doc
(which contains license information) and the README file.
This file contains a Fortran90 pseudorandom number
generator, based on the recently discovered class of provably normal
numbers  see paper "Random Generators and Normal Numbers", by DHB
and Richard Crandall, in the papers directory. In particular,
subroutine bcnrand generates a sequence of IEEE 64bit floatingpoint
numbers uniformly in (0,1), with period (if parameters are properly
selected) = 2x3^32 = 3.7060404e15. It is completely selfcontained 
the required doubledouble arithmetic subroutines are included in the
Fortran90 source file. The bcnrand routine is designed for simple
parallelization, yielding the same overall sequence as with a
oneprocessor program. Also included here is a memorytesting program
based on the bcnrand generator.