#ifndef _NR_UTILS_H
#define _NR_UTILS_H
#define ANSI 1
static double sqrarg;
#define SQR(a) ((sqrarg=(a)) == 0.0?0.0:sqrarg*sqrarg)
static double dsqrarg;
#define DSQR(a) ((dsqrarg=(a)) == 0.0?0.0:dsqrarg*dsqrarg)
static double dmaxarg1,dmaxarg2;
#define DMAX(a,b) (dmaxarg1=(a),dmaxarg2=(b),(dmaxarg1)>(dmaxarg2)?\
(dmaxarg1):(dmaxarg2))
static double fmaxarg1,fmaxarg2;
#define FMAX(a,b) (fmaxarg1=(a),fmaxarg2=(b),(fmaxarg1)>(fmaxarg2)?\
(fmaxarg1):(fmaxarg2))
static long lmaxarg1,lmaxarg2;
#define LMAX(a,b) (lmaxarg1=(a),lmaxarg2=(b),(lmaxarg1)>(lmaxarg2)?\
(lmaxarg1):(lmaxarg2))
static int imaxarg1,imaxarg2;
#define IMAX(a,b) (imaxarg1=(a),imaxarg2=(b),(imaxarg1)>(imaxarg2)?\
(imaxarg1):(imaxarg2))
static double dminarg1,dminarg2;
#define DMIN(a,b) (dminarg1=(a),dminarg2=(b),(dminarg1)>(dminarg2)?\
(dminarg1):(dminarg2))
static double fminarg1,fminarg2;
#define FMIN(a,b) (fminarg1=(a),fminarg2=(b),(fminarg1)>(fminarg2)?\
(fminarg1):(fminarg2))
static long lminarg1,lminarg2;
#define LMIN(a,b) (lminarg1=(a),lminarg2=(b),(lminarg1)>(lminarg2)?\
(lminarg1):(lminarg2))
static int iminarg1,iminarg2;
#define IMIN(a,b) (iminarg1=(a),iminarg2=(b),(iminarg1)>(iminarg2)?\
(iminarg1):(iminarg2))
#define SIGN(a,b) ((b) >= 0.0?fabs(a):-fabs(a))
#if defined (__STDC__)||defined(ANSI)||defined(NRANSI)/*ANSI*/
void nrerror (char error_text[]);
double *vector (long nl,long nh);
double *dvector (long nl,long nh);
int *ivector (long nl,long nh);
unsigned char *cvector (long nl, long nh);
double **matrix (long nrl,long nrh,long ncl,long nch);
double **dmatrix(long nrl,long nrh,long ncl,long nch);
int **imatrix(long nrl,long nrh,long ncl,long nch);
double **submatrix(double **a,long oldrl,long oldrh,long oldcl,long oldch,
long newrl,long newcl);
void free_vector(double *v,long nl,long nh);
void free_dvector(double *v,long nl,long nh);
void free_ivector(int *v,long nl,long nh);
void free_cvector(unsigned char *v,long nl, long nh);
void free_matrix(double **m,long nrl,long nrh,long ncl,long nch);
void free_dmatrix(double **m,long nrl,long nrh,long ncl,long nch);
void free_imatrix(int **m,long nrl,long nrh,long ncl,long nch);
void free_submatrix(double **b,long nrl,long nrh,long ncl,long nch);
double **convert_matrix(double *a, long nrl,long nrh,long ncl,long nch);
void free_convert_matrix(double **b,long nrl,long nrh,long ncl,long nch);
double ***f3tensor(long nrl,long nrh,long ncl,long nch,long ndl,long ndh);
void free_f3tensor(double ***t,long nrl,long nrh,long ncl,long nch,
long ndl,long ndh);
#else /*ANSI*/
/*traditional -K&R*/
void nrerror();
double *vector();
//Here one should place rest of traditional declarations.
#endif /*ANSI*/
#endif /*_NR_UTILS_H*/