               
--------------------
MAPM Library History
--------------------
 
V 1.00  -  June 1, 1999    Initial Release

V 1.10  -  June 20, 1999   Use a stack implementation for local M_APM
			   variables instead of static variables.

			   Use a new faster algorithm for SIN & COS.

V 1.20  -  July 10, 1999   Improve the algorithm for ARCSIN and ARCCOS
			   when the input argument is near 1.0.

			   Added the 'DUP' operator to the 'calc' demo
			   program.

V 1.30  -  July 31, 1999   Added a function to output M_APM values as
			   integers.

			   Supply another demo program which generates
			   prime numbers (and uses the integer output
			   format).

			   Improved the 4 iterative routines, dynamically
			   adjusting the local precision each time through
			   the loop. Also changed the tolerance test to
			   use integers (vs a MAPM number).

V 2.00  -  Aug 15, 1999    Added a 'fast' multiplication algorithm.

V 2.10  -  Sep 24, 1999    Added integer POW function.  Compute X^Y when
			   'Y' is an integer.

			   Added a random number generator (with a period
			   of 1.0E+15).

			   Added function to compute both sin and cos with
			   one call.

V 2.15  -  Feb 10, 2000    Allow caller to easily use their own memory
                           management functions.

			   Implement the real exponential algorithm as
			   originally intended by David Bailey.

			   Delete the extra recursive function from the
			   fast multiply routine.

			   Calculate a few extra digits in the intermediate
			   results of 'calc' so the final answers are
			   always consistent.

V 2.20  -  Mar 30, 2000    Let log, arc-sin, and arc-cos determine the
			   max number of iterations that should be required
			   to calculate a given precision level.

			   Optimize the raw series expansion for exp, sin,
			   and cos to use integers instead of MAPM numbers
			   in the tolerance test to determine loop termination.

V 2.25  -  Apr 2, 2000     Added a CBRT function (cube root)
			   
			   Added the hyperbolic SIN, COS, and TAN functions
			   plus their inverses.

			   Alias m_apm_asin to m_apm_arcsin. Also for acos,
			   atan, and atan2.

			   Updated CALC and VALIDATE to use the new functions.

V 3.00  -  Apr 7, 2000     Added the MAPM C++ wrapper class. Supplied by
			   Orion Sky Lawlor  (olawlor@acm.org)
			   This C++ class allows 'normal' syntax when using
			   the library.

V 3.05  -  Apr 14, 2000    Optimized the basic divide algorithm. It is now
			   approx 10 - 15 % faster.

                           Optimized the fast multiply algorithm. It is now
			   approx 2X faster. (depends on input numbers,
			   sometimes I got 50%, other times 3X)

V 3.06  -  May 6, 2000     Optimized a few more functions.

 			   In 'CALC', recompute PI on the fly if more digits
			   are asked for than the default precision.

			   Changed default compile optimizations to use
			   '-O2' instead of '-O'. Just making a note.
			   in case some compilers don't handle this well.

V 3.10  -  May 21, 2000    Eliminated all warnings due to internal constants
			   lacking enough precision for a given calculation.
			   Any internal constant (like PI, log(2)) lacking the
			   precison needed for a given calculation will be
			   re-computed on the fly as necessary.  The only
			   warnings from the library now are legitimate domain
			   errors, sqrt of a negative number, etc.

V 3.15  -  May 26, 2000    Optimize the factorial function. It is now approx
			   10X faster when N is large (i.e., N > 5000).
			   
			   Return 1 from pow function when computing 0^0.

V 3.16  -  Jun 24, 2000    Added makefile for Borland 5.2 / 5.5 C++
			   command line compilers for Win NT/9x.
 
			   Fixed link problems due to some C libraries not
			   having native cube root or inverse hyperbolic
			   functions.

V 3.50  -  Jul 4, 2000     Added an FFT (Fast Fourier Transform) based
			   fast multiplication. The FFT fast multiplication
			   is O(N * Log2(N)). The FFT used is from the
			   Numerical Recipes book.

			   Fixed extern int declare in M_APM.H due to
			   variable name mangling in MSVC C++ compiler.

V 3.51  -  Jul 7, 2000     Changed the FFT. The new FFT is from Takuya OOURA.
			   email: ooura@mmm.t.u-tokyo.ac.jp
 
			   Added build batch file for MSVC C++ compiler.
			   (Note: I can't verify this works since I don't
			   have MSVC C++)

V 3.55  -  Jul 12, 2000    Optimized the FFT set-up wrapper function. Convert
			   MAPM base 100 numbers into base 10000 before
			   invoking the FFT. (2X speed improvement and 1/2
			   the RAM usage)

			   Use the AGM (Arithmetic-Geometric Mean) to
			   calculate PI when a more precise value is needed.

			   Added a real Makefile for Unix builds (finally!)

V 3.56  -  Jul 19, 2000    Decrease the max number of bytes the FFT can
			   handle. *Worst* case inputs (all 9's) could have
			   caused the FFT math to overflow.

			   Added a build batch file for older Borland
			   compilers. (Works with Turbo C++ 3.00)

V 3.60  -  Aug 24, 2000    Added 36 'memory' locations to the calc demo
			   program.

			   Added a new function to determine if a MAPM
			   number is an integer value or not.

			   When computing X^Y with the pow function,
			   automatically call integer_pow if 'Y' is
			   an integer value.

V 3.65  -  Oct 1, 2000     Added a reciprocal function using an iterative
                           method.

			   Used the new reciprocal function to improve the
			   divide function.

			   Implemented an improved SQRT alogrithm. The new
			   one only uses multiplication and subtraction.
			   (The old algorithm used division which is slow).

V 3.70  -  Nov 10, 2000    Use a more efficient 'log' algorithm and also
			   use a series expansion if the input is very close
			   to '1'.

			   Made a minor speed optimization to cube root.

			   Added build batch file for MSVC C++ compiler which
			   also uses a real 'makefile'.

V 3.75  -  Dec 10, 2000    Use more efficient 'arc' family of functions if
			   the input arg is very close to zero.

V 3.80  -  Mar 1, 2001     Improve the prime number demo program.

			   A number of minor code tweaks. This was mainly
			   in preparation for the upcoming 64 bit compilers.
			   I think everything is ready, but I really won't
			   know until I can actually get my hands on one ...

V 3.85  -  Apr 2, 2001     Added new 'floor' and 'ceil' functions.

			   Use a new multiplier in the random number generator.

			   Added a build batch file for the LCC-WIN32 compiler.

V 4.0   -  Jul 21, 2001    Added functions to compute GCD (greatest common
			   divisor) and LCM (least common multiple).
			   See 'm_apm_gcd' and 'm_apm_lcm'.

			   Added GCD and LCM to the 'calc' demo program.

			   Added new utility functions to determine if a MAPM
			   integer value is EVEN or ODD. See 'm_apm_is_even'
			   and 'm_apm_is_odd'.

			   Added function to release ALL memory that MAPM
			   has allocated. Added similiar function to trim
			   memory usage of MAPM without impacting any library
			   operation.  See 'm_apm_free_all_mem' and
			   'm_apm_trim_mem_usage'.

			   Made a minor speed optimization to SQRT.

			   Optimized the normalization function.

			   Optimized the series expansion function for
			   sin/cos/exp. This has the added benefit of also
			   speeding up log, log10, pow, arc_###, etc.

V 4.1   -  Aug 10, 2001    Fixed a minor problem with m_apm_to_integer_string.
			   If the input was 'slightly' smaller than an integer,
			   it would round the value up to the next int.
			   'Slightly' here means 1.0E-4 or smaller. If the
			   input was NNN.9999+ then NNN+1 would be returned.
			   The documented behavior is to truncate the value
			   to the next smallest integer and it now behaves as
			   expected.
			   
			   Note: The previous function always gave the correct
			   output if the input was already an integer value
			   (which is why I didn't notice for so long ...).

			   Optimized the basic multiply function.

			   Added a build batch file for the Watcom C 11.x
			   compiler.

			   Changed the MSVC C++ compiler build from a makefile
			   back to a batch file (MKALLMSC.BAT). The makefile
			   was cumbersome and difficult to maintain. IMHO :)
			   If the user consensus wants the makefile back,
			   I'll put it back in.

**************************************************************************
