               Multiple Precision Package for C++
                  version 2.0, April 1, 2000

     This is a package for multiple precision arithmetic.  It adds
two new classes to C++, namely, realmp and complexmp.  All arithmetic
operations such as +,-,*,/ and the elementary transcendal functions
such as sin, cos, tan, atan, log, exp are overloaded so that one
can program just as one would in C++ except that the precision of
the operations is set by the user.  Utilities for printing multiple
precision numbers and storing them on disk are provided.

     Complex arithmetic and transcendental functions with complex
arguments are covered.  Applications to linear system solving,
polynomial solving, manipulation of power series, and calculation
of Pade approximants are included.

     Details are provided in manover.txt (the most recent manual
written after the arithmetic operations were overloaded and the
elementary functions overloaded), manuald.txt (written after
assembly language was inserted to speed up the calculations), and
manual.txt (written to cover the earliest, most primitive version
of the code).

                  Remarks applicable to this
                  new version of multiple precision
                  package for C++ version 2.0

     This is version 2.0.  An error in the package genprecd.h,
in the subroutine zsub, at line 605 has been corrected.  In the
previous version, this line read
                   int precp1a=prec+1;
whereas it should have read
                   precp1a=prec+1;
Also, in version 2.0, sqrt(0) is set immediately to 0.  In the
previous version, calculation of sqrt(0) lead to some harmless
"divide by 0" appearing on screen in some cases, but this has
been eliminated.  And finally, the polynomial solver for poly-
nomials with complex coefficients has been completed so that 
there are no known polynomials which cannot be solved in
principle (that is, given enough precision, enough memory, and
enough time).  In the new polynomial solver for polynomials with
complex coefficients, an angle through which the polynomial is
rotated so that no two roots (unless there are multiple roots)
have the same real part (a moments thought shows that there always
exists such an angle).  The user must set the rotation angle in

csolvpoly(int cnpoly,complexmp poly[cmaxsizepad],realmp rotationangle);

Since the roots are not known before hand, it may be that a
rotation angle does not work and some other value will have to be
tried.  Certainly 0 does not work if two roots are complex
conjugates of each other. In the example cpolydex.cc the rotation
angle is set to 0.2 radians.  Roots of odd multiplicity present
no problem to the code, and after all roots of odd multiplicity
have been divided out of the polynomial, the square root of the
polynomial is taken as often as needed to find the roots of even
multiplicity.
    
     The assembly language (modes1.hh) in this new version 2.0 will
work with all versions of djgpp.  The modes1.hh in the previous
package will work with the latest version of djgpp (version 2.03
released in January, 2000), and also version 2.01 of djgpp, but not
with the version previous to the latest version.  

     Frank Donahoe has pointed our errors and made a number of
helpful suggestions which have made it possible to correct and
improve the package.  His address and e-mail address are

Frank Donahoe, Emeritus - Physics	fdonahoe@wilkes1.wilkes.edu
Wilkes University, Box 111              
Wilkes-Barre, PA  18766
USA                                     


