Multiprecision Software Directory

Update: 2003-06-03


This web site (see software package links below) contains the double-double precision, quad-double precision and arbitrary precision software written by David H. Bailey (LBNL), Yozo Hida (U.C. Berkeley), Xiaoye S. Li (LBNL) and Brandon Thompson (U.C. Berkeley). This software is provided for research use only. Incorporating this software in any commercial product requires a license agreement. This software is not warranted by the authors, the University of California or the Lawrence Berkeley National Laboratory. This work was supported in part by the Director, Office of Science, Division of Mathematical, Information, and Computational Sciences of the U.S. Department of Energy under contract number DE-AC03-76SF00098. Please send any comments or bug reports to Bailey. Here are some related links of interest:

  • Bailey's website
  • Li's website
  • Hida's website
  • Individual pi digit calculating algorithm
  • Individual pi digit algorithm coded in Fortran
  • Individual pi digit algorithm coded in C
  • CECM integer relation detection.
  • Inverse symbolic calculator tool.
  • Software packages

    Software and documentation are provided in five zipped tar files, as shown below. On many systems, browsers can automatically unzip, untar and install the individual files in directories. On Unix systems, first download the respective file, say xxx.tar.gz, then type "gunzip xxx.tar.gz" and "tar xfv xxx.tar". Each package includes a "readme" file, which contain detailed information on compiling and running the programs, as well as some technical documentation and usage information.
  • qd (double-double and quad double package) qd.tar.gz
    This package supports both a double-double datatype (approx. 32 decimal digits) and a quad-double datatype (approx. 64 decimal digits). The computational library is written in C++. Both C++ and Fortran-90 high-level language interfaces are provided to permit one to use convert an existing C++ or Fortran-90 program to use the library with only minor changes to the source code. In most cases only a few type statements and (for Fortran-90 programs) read/write statements need to be changed. PSLQ and numerical quadrature programs are included.

  • MPFUN77 (Fortran-77 arbitrary precision package) 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 extra-high precision (above 1000 digits). High-precision real, integer and complex datatypes are supported. A translator program is also provided that permits one to convert an existing Fortran-77 program to use the library, by inserting special comments in the source code. This package is now considered obsolete, and is no longer actively supported. New users are strongly encouraged to use either the mpfun-90 package or (preferably) the new ARPREC package.

  • MPFUN90 (Fortran-90 arbitrary precision package) mpfun90.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 extra-high precision (above 1000 digits). High-precision real, integer and complex datatypes are supported. Fortran-90 translation modules are also provided that permit one to convert an existing Fortran-90 program to use the library with only minor changes to the source code. In most cases only the type statements and read/write statements need be changed. Four implementations of PSLQ (one- and two-level, regular and multi-pair) are included, as well as two high-precision quadrature programs. While this package is still actively supported, new users are encouraged to use the ARPREC package.

  • ARPREC (C++/Fortran-90 arbitrary precision package) arprec.tar.gz (version date 2003-06-02)
    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 extra-high precision (above 1000 digits). The entire library is written in C++. High-precision real, integer and complex datatypes are supported. Both C++ and Fortran-90 translation modules modules are also provided that permit one to convert an existing C++ or Fortran-90 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 Fortran-90 programs) read/write statements need be changed. Six implementations of PSLQ (one-, two- and three-level, regular and multi-pair) are included, as well as three high-precision quadrature programs. New users are encouraged to use this package.
    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 high-precision arithmetic computing environment. One enters expressions in a Mathematica-style 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, multi-pair PSLQ (one-, two- or three-level versions), high-precision quadrature, i.e. numeric integration (Gaussian, error function or tanh-sinh), and summation of series.

  • random (Fortran-90 pseudo-random number generator based on normal number paper) random.tar.gz
    This file contains a Fortran-90 pseudo-random 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 64-bit floating-point numbers uniformly in (0,1), with period (if parameters are properly selected) = 2x3^32 = 3.7060404e15. It is completely self-contained -- the required double-double arithmetic subroutines are included in the Fortran-90 source file. The bcnrand routine is designed for simple parallelization, yielding the same overall sequence as with a one-processor program.