MAPM is a portable arbitrary precision math library in C.
MAPM (My Arbitrary Precision Math) library is a set of functions that allow the user to perform math to any level of accuracy that is desired. The precision of a number is only limited by 'INT_MAX' and available memory. For a 16 bit compiler, a number may have 2^15 digits (or ~32,000). For a 32 bit compiler, a number may have 2^31 digits (or ~2.14E+9). See the README file (in the distribution as well as a link below) for a more complete discussion of the actual numerical limitations.
This library has a natural support for floating point values. From most of the other 'C' libraries I looked at, they seem to have a preference for integer only type math manipulations. (This library will also do integer only math if you desire.)
And if a library can only do integers, it can't do ...
Trig functions and other common C math library functions. This library will perform the following functions to any desired precision level : SQRT, CBRT, SIN, COS, TAN, ARC-SIN, ARC-COS, ARC-TAN, ARC-TAN2, LOG, LOG10, EXP, POW, SINH, COSH, TANH, ARC-SINH, ARC-COSH, ARC-TANH, FLOOR, CEIL, GCD, LCM, and also FACTORIAL. The full 'math.h' is not duplicated, though I think these are most of the important ones. My definition of what's important is what I've actually used in a real application.
This library also has a random number generator with a period of 1.0E+15, i.e. the generator will produce 1.0E+15 unique random numbers before the pattern repeats.
This library utilizes a fast multiplication algorithm. This results in much faster multiplications than the typical O(n^2) algorithm. It uses an FFT (fast fourier transform) based multiplication algorithm. This results in only O(n * Log2(n)) growth.
The library is written in 'C' and the distribution includes all source code and documentation. It has been tested under Linux (x86), FreeBSD, HP-UX, Sun Solaris, Venix, MAC OSX, DOS, and Win 2000, NT, XP. GCC was the primary compiler used in the Unix environment. For DOS/NT/XP, the MAPM library has been tested with the the following compilers:
· GCC (2.8.1, 2.95.2, and 3.2.3) for DOS (D.J. Delorie's DJGPP)
· Borland C++ 5.x (32 bit) and Turbo C++ 3.0 (16 bit)
· Microsoft Visual C++ 6.0 (32 bit) and Microsoft C 5.1, 8.00c (16 bit)
· LCC-Win32 Ver 3.2/3.3
· MINGW-32 Version mingw-1.0.1-20010726
· Metrowerks CodeWarrior Pro 7.0
· Watcom C/C++ 11.x, Open Watcom 1.0
· DEV-C++ 5.0 Beta 8 Release 126.96.36.199
· Digital Mars Compiler 8.49
· National Instruments LabWindows CVI 6.0
Great care was taken during design to make the library as portable as possible. If you are using a compiler not listed above, you should have minimal problems getting the library to compile on your system. If you compile the library with a compiler that I don't have access to, feel free to send me your makefile/build script and I'll include it with the next release.
What's New in This Release:
· With the release of version 4.9.5, I have updated the license to allow distribution of modified library source code. In the DOCS directory of the distribution, there is a file 'license.txt' which should be inserted before any modified source files. Simply edit the 'license.txt' template accordingly, and permission is granted to distribute modified source code.