Multiple Precision Computation

Dr. David M. Smith
Professor of Mathematics (Emeritus)
Loyola Marymount University
Los Angeles, CA


News:

July, 2016:
Three new modules are available that allow programs to work with FM  
when they explicitly declare some variables to be quadruple precision  
real or complex (128 bits), double length integer (64 bits), or  
quadruple length integer (128 bits).  
These modules are more general and can be more flexible for interfacing  
multiple precision type (fm), (im), or (zm) variables with user variables  
of these other three kinds.  
See below for a link to a page for these three modules.  

March, 2016:
A new package is available for multiple-precision exact rational  
arithmetic. See below for a link to a page for the files that define  
the package. Many of the other files here have changed, with some  
new code to support the rational arithmetic routines.  
Several files on the sample program page have also changed.  

July, 2015:
Some changes have been made to FM to support programs that need  
64-bit integer arithmetic. This version works with either 64-bit or  
32-bit integers.  
This version can be useful even for programs that don't need 64-bit  
integers if having extended FM over/underflow thresholds is useful.  
See the "Installing the FM package" section of file FM_User_Manual.txt  
below for more details.  

This page has some older FM news items.


Overview of the FM package

The package performs multiple-precision real, complex, and integer arithmetic.
It provides the intrinsic Fortran numerical functions, as well as many special functions that are
not included in the Fortran standard.

In addition to these three basic arithmetic types, multiple-precision exact rational arithmetic
and interval arithmetic are also available.

One of the primary uses of the package is to study the accuracy and stability of numerical
algorithms by comparing results computed with several different levels of precision.

An existing Fortran program can be checked by converting it from double precision
to FM arithmetic. The package is designed to make this conversion fairly easy.

The precision, base, and rounding mode for the arithmetic can be set by the user.

Functions are available for conversion between multiple-precision numbers and machine-precision
numbers (single and double precision real and complex, and integer types). Mixed-mode operations
involving multiple-precision numbers and machine-precision numbers are handled automatically in
statements such as a = b - 1 or y = x/3.

There are functions for input/output operations and output formatting. Formatting functions are
very similar to Fortran's format specifications.

The package also has routines for integer multiple-precision arithmetic and functions, including
GCD, modular products and powers, and a random number generator based on 49-digit primes.

Array syntax works like Fortran's array operations in statements like v = 1, a = b + c, and
y = cos(x) when these variables are vectors or matrices of multiple precision numbers.

The program SampleFM.f95 below shows several examples of using FM for high-precision real,
complex, and integer calculations.


List of files for FMLIB 1.3: (July, 2016 version)

Click a given file. If you directly download it, there may be an extra ".txt" filetype at the
end of the file name. Delete it. (You might also have to change "f95" to "f90" or something
else, depending on your compiler.)

FM.f95
Subroutine library for multiple-precision operations. 64,677 lines of code

FMZM90.f95
Module for derived type interfaces. 47,960 lines of code

FMSAVE.f95
Module for FM internal global variables. 488 lines of code

TestFM.f95
Test program that checks a few operations for all of the FM routines. 43,962 lines of code

SampleFM.f95
Small sample program using FM. 893 lines of code

SampleFM.chk
Expected output file from SampleFM.f95. 157 lines

FM_User_Manual.txt
User's Guide for the package, along with a list of the files, some troubleshooting advice,
and an example set of compiler/linker commands for building the programs. 2,527 lines


Papers Online (in pdf format)

All of these are technical papers explaining the algorithms used by the multiple-precision
package, except the last one.

"Using Multiple-Precision Arithmetic" gives some samples and discusses the package
from a user's point of view.

Efficient Multiple-Precision Evaluation of Elementary Functions
Mathematics of Computation 52 (1989) 131 -- 134

A Fortran Package For Floating-Point Multiple-Precision Arithmetic
Transactions on Mathematical Software 17 (1991) 273 -- 283

A Multiple-Precision Division Algorithm
Mathematics of Computation 66 (1996) 157 -- 163

Multiple Precision Complex Arithmetic and Functions
Transactions on Mathematical Software 24 (1998) 359 -- 367

Multiple-Precision Gamma Function and Related Functions
Transactions on Mathematical Software 27 (2001) 377 -- 387

Multiple-Precision Exponential Integral and Related Functions
Transactions on Mathematical Software 37 (2011) 1 -- 18

A Multiple-Precision Interval Arithmetic Package
http://myweb.lmu.edu/dmsmith/FMLIB.html (2014) 1 -- 13

Using Multiple-Precision Arithmetic
Computing in Science and Engineering 5 (July, 2003) 88 -- 93


Papers Online (individual pages can be viewed with a browser)

Efficient Multiple-Precision Evaluation of Elementary Functions
Mathematics of Computation 52 (1989) 131 -- 134
Page 1, 2, 3, 4

A Fortran Package For Floating-Point Multiple-Precision Arithmetic
Transactions on Mathematical Software 17 (1991) 273 -- 283
Page 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

A Multiple-Precision Division Algorithm
Mathematics of Computation 66 (1996) 157 -- 163
Page 1, 2, 3, 4, 5, 6, 7, 8

Multiple Precision Complex Arithmetic and Functions
Transactions on Mathematical Software 24 (1998) 359 -- 367
Page 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Multiple-Precision Gamma Function and Related Functions
Transactions on Mathematical Software 27 (2001) 377 -- 387
Page 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

Multiple-Precision Exponential Integral and Related Functions
Transactions on Mathematical Software 37 (2011) 1 -- 18
Page 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19

Using Multiple-Precision Arithmetic
Computing in Science and Engineering 5 (July, 2003) 88 -- 93
Page 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11


Multiple precision rational arithmetic

This page has the code for the FM rational arithmetic package,
along with several sample programs that use the package and a user's manual.


Multiple precision interval arithmetic

This page has the code for the FM interval arithmetic package,
along with several sample programs that use the package and a user's manual.


Interface modules for user variables of double or quadruple length

This page has three modules that allow programs to work with FM when they explicitly
declare some variables to be quadruple precision real or complex, double length integer,
or quadruple length integer.
There is a test program for each module, a sample program that uses the modules and a user's
manual for the modules.


Automatic conversion of Fortran programs to use FM

This page has a program that tries to automate most of the changes
needed to convert a normal Fortran program to a multiple-precision version using FM.


Function domains

This page has a table of domains for FM functions.


Function timing

This page has a table of times for FM functions.


More sample programs

This page has some example programs solving problems in root-finding, linear systems of equations,
least-squares fitting, integrals, differential equations, derivatives for real and complex functions, etc.