
		GNUMATH: A Numerical Mathematics Library

			  Robert D. Pierce

		      Department of Mathematics
		  The Pennsylvania State University
		      University Park, PA 16802
			 pierce@math.psu.edu
			  January 11, 1996


GNUMATH is a software package designed to simplify programming for scientific
applications.  The primary focus is on numerical linear algebra and problems 
which may be solved with straight-forward application of these algorithms.
Other aspects of the package deal with plotting and a few other topics.
GNUMATH is in beta release, and the scope and versatility of the releases
will grow in time.

There are two components of the library: a C version and a C++ version.
In large part, the C component is simply a compiled interface to the 
C++ version.  While many programmers feel that C is a "better" language 
in which to perform numerical computations, this is not true for this 
package.  Developments in C++ compiler technology effectively eliminate 
any performance advantage to programming in C.  When the flexibility and 
convenience of the C++ language with respect to operator overloading and 
type management is taken into account, it is fairly clear that C++ is the 
superior language for scientific applications.  However, there are certainly 
valid reasons for programming numerical applications in C, so we provide 
interfaces for both languages.

The C++ component is primarily based on vector and matrix classes supplied
with libg++.  The three main advantages of these classes are that they are 
template based, they are compatible with the Standard Template Library, and 
they execute many operations in a deferred execution mode (sort of an 
automatic loop unrolling mechanism).  The template array classes are 
documented in detail in the document "Numerical template arrays in libg++".
For convenience, the documentation and implementations of the vector and 
matrix classes are included with this distribution as well.  It is 
recommended that programmers using this package become familiar with these 
classes and their documentation.  If you are not familiar with templates in 
C++, it is recommended that you become comfortable with them before 
programming with the C++ version of the library.  There is nothing hardware 
or compiler dependent in either this distribution or the template array 
distribution.  In principle, they may be used with any ANSI/ISO compliant 
C++ compiler which implements enough of the forthcoming standard.

The functionality of this package is provided in the form of template
functions and classes, plus a number of structures and functions with
explicit C-linkage.  In the standard installation, the C functions are 
compiled into a library, libgnumath.a, which may be linked to any C program.  
Note that while the C source code may be compiled into object code using
gcc, the linking must be performed under g++.  The C++ functions are contained
in header files and are not automatically compiled into any library.
This creates some differences between how the C and C++ portions of the 
library are governed by the GNU Library Public License.  Please see the 
accompanying documentation for further details.

