Multiple Precision Computation

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


News:

September, 2021:
For this release of version 1.4 of the FM package I have  
learned of a way to modify FM to work around the gfortran bug  
mentioned in the August, 2021 release of the package (thanks,  
Luo Zhangping). All the sample and test programs below now  
work on all three compilers I have tested.  
Read more details about the standard FM 1.4 here  

August, 2021:
A new version 1.4 of the FM package is available.  
The changes in version 1.4 were made to enable a thread-safe  
special version of FM to be created, see file FM_parallel.f95.  
Read more details about the parallel FM 1.4 here  

February, 2021:
I have started making complex FM versions of some of the mathematical  
special functions. Functions in the Feb., 2021 version that now support  
complex input and results:  
erf(z), erfc(z), erfc_scaled(z) -- error function, complimentary  
                        function, scaled complimentary error function  
gamma(z), log_gamma(z), factorial(z) -- gamma, log_gamma, z!  

March, 2019:
There is a new version for the Calc-50 high-precision calculator app  
for iPhones and iPads. Version 1.3 has added a new function for  
extrapolation and the sum function has been enhanced so it can  
handle infinite series automatically.  
There are new example pages showing how these features can be used.  
Calc-50  

January, 2018:
This multiple precision web site has been moved to a new server.  
The old site at http://myweb.lmu.edu/dmsmith/FMLIB.html has been shut  
down, and any reference to any of the pages at the old myweb site  
should now be automatically re-directed to this page on the new server:  
http://dmsmith.lmu.build  

October, 2017:
Many of the files have new code that works around the Mac gfortran  
bug in versions 6.1 -- 6.4. The gfortran developers say it should be  
fixed in 6.5, but since 6.3 is currently the latest version available  
as a Mac download, it could be a while before 6.5 appears.  
They suggested a way to avoid the problem by initializing the  
array-valued functions within FM. This version should still work  
on compilers that do the initializations correctly.  
The zip file below has the updated version of all the files.  

August, 2017:
All the source code and sample output files from the various pages of  
this site have now been put into one zip file.  
This is the May, 2017 version of the package -- there have been  
a few minor changes to several of the routines since the 2016 version.  
 
Mac gfortran (macOS Sierra (10.12): download gfortran 6.3)  
at https://gcc.gnu.org/wiki/GFortranBinaries has a bug that causes some  
FM programs to fail, including SampleFM.f95, TestFM.f95, and 7 of  
the programs on the FM Sample Programs page.  
It affects functions that return array function values of types (FM),  
(IM), (ZM), etc. This includes cases like A = B + C, where the  
variables are multiple precision vectors or matrices.  
In SampleFM, for example, the package detects that in the Sample10  
case, the compiler has not properly initialized a multiple precision  
array associated with the function value. The program then prints  
an error message and stops.  
gfortran 5.2 was the last version I tested that was ok. There is a  
gfortran 6.1 version, but I haven't tested it.  
Version 6.4 has just been released, but the bug has not yet been fixed  
The gfortran developers say it should be fixed in version 6.5.  

This page has some older FM news items.

There is a backup copy of this site on the Wayback Machine.
Click on the latest saved copy there.


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.

Integer multiple-precision arithmetic and functions include 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.4: (September, 2021 version)


The actual files shown on this page are in this archive that contains all the FM files from this
website: FM_files.zip

The individual file pointers here display as pdf files for browsing. The longer files are cut
off after 20 pages.


FM.f95
Subroutine library for multiple-precision operations. 63,178 lines of code

FMZM90.f95
Module for derived type interfaces. 43,186 lines of code

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

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

SampleFM.f95
Small sample program using FM. 871 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,444 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://dmsmith.lmu.build/FMinterval2014.pdf (2014) 1 -- 13

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


Thread-safe parallel version of FM

This page has the code for the thread-safe version of FM
along with two sample programs that use the package and a user's manual.


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.


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.