@cindex license of GSL
@cindex GNU General Public License
The GNU Scientific Library (GSL) is a collection of routines for
numerical computing.  The routines have been written from scratch in C,
and present a modern Applications Programming Interface
(API) for C programmers, allowing wrappers to be written for very
high level languages.  The source code is distributed under the GNU
General Public License.


@menu
* Routines available in GSL::   
* GSL is Free Software::        
* Obtaining GSL::               
* No Warranty::                 
* Reporting Bugs::              
* Further Information::         
* Conventions used in this manual::  
@end menu

@node Routines available in GSL
@section Routines available in GSL

The library covers a wide range of topics in numerical computing.
Routines are available for the following areas,

@iftex
@sp 1
@end iftex
@multitable @columnfractions 0.05 0.45 0.45 0.05
@item @tab Complex Numbers            @tab Roots of Polynomials        
@item @tab Special Functions          @tab Vectors and Matrices        
@item @tab Permutations               @tab Combinations              
@item @tab Sorting                    @tab BLAS Support               
@item @tab Linear Algebra             @tab CBLAS Library
@item @tab Fast Fourier Transforms    @tab Eigensystems               
@item @tab Random Numbers             @tab Quadrature                 
@item @tab Random Distributions       @tab Quasi-Random Sequences     
@item @tab Histograms                 @tab Statistics                 
@item @tab Monte Carlo Integration    @tab N-Tuples                   
@item @tab Differential Equations     @tab Simulated Annealing        
@item @tab Numerical Differentiation  @tab Interpolation              
@item @tab Series Acceleration        @tab Chebyshev Approximations   
@item @tab Root-Finding               @tab Discrete Hankel Transforms 
@item @tab Least-Squares Fitting      @tab Minimization               
@item @tab IEEE Floating-Point        @tab Physical Constants         
@item @tab Wavelets
@end multitable
@iftex
@sp 1
@end iftex

@noindent
The use of these routines is described in this manual.  Each chapter
provides detailed definitions of the functions, followed by example
programs and references to the articles on which the algorithms are
based.

Where possible the routines have been based on reliable public-domain
packages such as FFTPACK and QUADPACK, which the developers of GSL
have reimplemented in C with modern coding conventions.

@node GSL is Free Software
@section GSL is Free Software
@cindex free software, explanation of
The subroutines in the GNU Scientific Library are ``free software'';
this means that everyone is free to use them, and to redistribute them
in other free programs.  The library is not in the public domain; it is
copyrighted and there are conditions on its distribution.  These
conditions are designed to permit everything that a good cooperating
citizen would want to do.  What is not allowed is to try to prevent
others from further sharing any version of the software that they might
get from you.

Specifically, we want to make sure that you have the right to share
copies of programs that you are given which use the GNU Scientific
Library, that you receive their source code or else can get it if you
want it, that you can change these programs or use pieces of them in new
free programs, and that you know you can do these things.

To make sure that everyone has such rights, we have to forbid you to
deprive anyone else of these rights.  For example, if you distribute
copies of any code which uses the GNU Scientific Library, you must give
the recipients all the rights that you have received.  You must make
sure that they, too, receive or can get the source code, both to the
library and the code which uses it.  And you must tell them their
rights.  This means that the library should not be redistributed in
proprietary programs.

Also, for our own protection, we must make certain that everyone finds
out that there is no warranty for the GNU Scientific Library.  If these
programs are modified by someone else and passed on, we want their
recipients to know that what they have is not what we distributed, so
that any problems introduced by others will not reflect on our
reputation.

The precise conditions for the distribution of software related to the
GNU Scientific Library are found in the GNU General Public License
(@pxref{GNU General Public License}).  Further information about this
license is available from the GNU Project webpage @cite{Frequently Asked
Questions about the GNU GPL},

@itemize @asis
@item 
@uref{http://www.gnu.org/copyleft/gpl-faq.html}
@end itemize

@noindent
The Free Software Foundation also operates a license consulting
service for commercial users (contact details available from
@uref{http://www.fsf.org/}).

@node Obtaining GSL
@section Obtaining GSL
@cindex obtaining GSL
@cindex downloading GSL
@cindex mailing list for GSL announcements
@cindex info-gsl mailing list
The source code for the library can be obtained in different ways, by
copying it from a friend, purchasing it on @sc{cdrom} or downloading it
from the internet. A list of public ftp servers which carry the source
code can be found on the GNU website,

@itemize @asis
@item 
@uref{http://www.gnu.org/software/gsl/}
@end itemize

@noindent
The preferred platform for the library is a GNU system, which allows it
to take advantage of additional features in the GNU C compiler and GNU C
library.  However, the library is fully portable and should compile on
most systems with a C compiler.  Precompiled versions of the library can be purchased from
commercial redistributors listed on the website above.

Announcements of new releases, updates and other relevant events are
made on the @code{info-gsl@@gnu.org} mailing list.  To subscribe to this
low-volume list, send an email of the following form:

@example
To: info-gsl-request@@gnu.org 
Subject: subscribe
@end example

@noindent
You will receive a response asking you to reply in order to confirm
your subscription.

@node  No Warranty
@section No Warranty
@cindex warranty (none)
The software described in this manual has no warranty, it is provided
``as is''.  It is your responsibility to validate the behavior of the
routines and their accuracy using the source code provided, or to
purchase support and warranties from commercial redistributors.  Consult
the GNU General Public license for further details (@pxref{GNU General
Public License}).

@node  Reporting Bugs
@section Reporting Bugs
@cindex reporting bugs in GSL
@cindex bugs, how to report
@cindex bug-gsl mailing list
@cindex mailing list, bug-gsl
A list of known bugs can be found in the @file{BUGS} file included in
the GSL distribution.  Details of compilation problems can be found in
the @file{INSTALL} file.

If you find a bug which is not listed in these files, please report it to
@email{bug-gsl@@gnu.org}.

All bug reports should include:

@itemize @bullet
@item
The version number of GSL
@item
The hardware and operating system
@item
The compiler used, including version number and compilation options
@item
A description of the bug behavior
@item
A short program which exercises the bug
@end itemize

@noindent
It is useful if you can check whether the same problem occurs when the
library is compiled without optimization.  Thank you.

Any errors or omissions in this manual can also be reported to the
same address.

@node  Further Information
@section Further Information
@cindex mailing list archives
@cindex website, developer information
@cindex contacting the GSL developers
Additional information, including online copies of this manual, links to
related projects, and mailing list archives are available from the
website mentioned above.  

Any questions about the use and installation of the library can be asked
on the mailing list @code{help-gsl@@gnu.org}.  To subscribe to this
list, send an email of the following form:

@example
To: help-gsl-request@@gnu.org
Subject: subscribe
@end example

@noindent
This mailing list can be used to ask questions not covered by this
manual, and to contact the developers of the library.

If you would like to refer to the GNU Scientific Library in a journal
article, the recommended way is to cite this reference manual,
e.g. @cite{M. Galassi et al, GNU Scientific Library Reference Manual (2nd
Ed.), ISBN 0954161734}.

If you want to give a url, use ``@uref{http://www.gnu.org/software/gsl/}''.

@node Conventions used in this manual
@section Conventions used in this manual
@cindex conventions, used in manual
@cindex examples, conventions used in
@cindex shell prompt
@cindex @code{$}, shell prompt
This manual contains many examples which can be typed at the keyboard.
A command entered at the terminal is shown like this,

@example
$ @i{command}
@end example

@noindent
@cindex dollar sign @code{$}, shell prompt
The first character on the line is the terminal prompt, and should not
be typed.  The dollar sign @samp{$} is used as the standard prompt in
this manual, although some systems may use a different character.

The examples assume the use of the GNU operating system.  There may be
minor differences in the output on other systems.  The commands for
setting environment variables use the Bourne shell syntax of the
standard GNU shell (@code{bash}).


