If you have not yet made R, under Unix you must first configure R, and
under Windows you need to set up almost all the tools to make R and
then run (cd .../src/gnuwin32/fixed; make).


Under Unix, making in this directory will make standalone libraries
libRmath.a and libRmath.so.  `make static' and `make shared' make
just one of them.

Under Windows, use make -f Makefile.win. This makes Rmath.dll with
import library libRmath.a, and static library Rmath.a.

NB: certain compilers are unable to do compile-time IEEE-754
arithmetic and so cannot compile mlutils.c.  The known example is
Sun's cc.  Use gcc for mlutils.c (or the whole library).


To use the routines in your own C or C++ programs, include

#define MATHLIB_STANDALONE
#include <Rmath.h>

and link against -lRmath.  The example file test.c does nothing
useful, but is provided to test the process.  Note that you will
probably not be able to run it unless you add the directory containing
libRmath.so to the LD_LIBRARY_PATH.

Under Windows you can also link statically against Rmath.a.


A little care is needed to use the random-number routines. You will
need to supply the uniform random number generator 

    double unif_rand(void)

or use the one supplied (and with a shared library or DLL you will
have to use the one supplied, which is the Marsaglia-multicarry with
an entry point

    set_seed(unsigned int, unsigned int)

to set its seeds).

The facilties to change the normal random number generator are
available through the constant N01_kind. This takes values
from the enumeration type

typedef enum {
    KINDERMAN_RAMAGE,
    AHRENS_DIETER,
    BOX_MULLER
} N01type;

(and USER_NORM is not available).


There is full access to R's handling of NaNs, Inf and -Inf via special
versions of the macros and functions

    ISNAN, R_FINITE, R_log, R_pow and R_pow_di

and (extern) constants R_PosInf, R_NegInf and NA_REAL. These
facilities work best on IEEE 754 machines, but are available for all.

There is no support for R's notion of missing values, in particular
not for NA_INTEGER nor the distinction between NA and NaN for doubles.
