typedef struct {
    double n;
    double d;
} fract;
#include "mconf.h"

extern double MACHEP;
extern double MAXLOG;
extern double MINLOG;
extern double MAXNUM;
extern double PI;
extern double PIO2;
extern double PIO4;
extern double SQRT2;
extern double SQRTH;
extern double LOG2E;
extern double SQ2OPI;
extern double LOGE2; 
extern double LOGSQ2;
extern double THPIO4;
extern double TWOOPI;

extern double acosh ( double x );
extern int airy ( double x, double *y, double *z, double *u, double *v );
extern double asin ( double x );
extern double acos ( double x );
extern double asinh ( double x );
extern double atan ( double x );
extern double atan2 ( double y, double x );
extern double atanh ( double x );
extern double bdtrc ( int k, int n, double p );
extern double bdtr ( int k, int n, double p );
extern double bdtri ( int k, int n, double y );
extern double beta ( double a, double b );
extern double lbeta ( double a, double b );
extern double btdtr ( double a, double b, double x );
extern double cbrt ( double x );
extern double chbevl ( double x, void *P, int n );
extern double chdtrc ( double df, double x );
extern double chdtr ( double df, double x );
extern double chdtri ( double df, double y );
extern void clog ( cmplx *z, cmplx *w );
extern void cexp ( cmplx *z, cmplx *w );
extern void csin ( cmplx *z, cmplx *w );
extern void ccos ( cmplx *z, cmplx *w );
extern void ctan ( cmplx *z, cmplx *w );
extern void ccot ( cmplx *z, cmplx *w );
extern void casin ( cmplx *z, cmplx *w );
extern void cacos ( cmplx *z, cmplx *w );
extern void catan ( cmplx *z, cmplx *w );
extern void csinh ( cmplx *z, cmplx *w );
extern void casinh ( cmplx *z, cmplx *w );
extern void ccosh ( cmplx *z, cmplx *w );
extern void cacosh ( cmplx *z, cmplx *w );
extern void ctanh ( cmplx *z, cmplx *w );
extern void catanh ( cmplx *z, cmplx *w );
extern void cpow ( cmplx *a, cmplx *z, cmplx *w );
extern void radd ( fract *a, fract *b, fract *c );
extern void rsub ( fract *a, fract *b, fract *c );
extern void rmul ( fract *a, fract *b, fract *c );
extern void rdiv ( fract *a, fract *b, fract *c );
extern double euclid ( double *x, double *y);
extern void cadd ( cmplx *a, cmplx *b, cmplx *c );
extern void csub ( cmplx *a, cmplx *b, cmplx *c );
extern void cmul ( cmplx *a, cmplx *b, cmplx *c );
extern void cdiv ( cmplx *a, cmplx *b, cmplx *c );
extern void cmov ( void *a, void *b );
extern void cneg ( cmplx *a );
__declspec (dllexport) double cabs ( cmplx *z );
extern void csqrt ( cmplx *z, cmplx *w );
extern double hypot ( double x, double y );
extern double cosh ( double x );
extern double dawsn ( double xx );
extern double ellie ( double phi, double m );
extern double ellik ( double phi, double m );
extern double ellpe ( double x );
extern int ellpj ( double u, double m, double *x, double *y, double *z, double *a );
extern double ellpk ( double x );
extern double exp ( double x );
extern double exp10 ( double x );
/* extern double exp1m ( double x ); */
extern double exp2 ( double x );
extern double expn ( int n, double x );
extern double ei ( double x );
extern double fabs ( double x );
extern double fac ( int i );
extern double fdtrc ( int ia, int ib, double x );
extern double fdtr ( int ia, int ib, double x );
extern double fdtri ( int ia, int ib, double y );
extern double ceil ( double x );
extern double floor ( double x );
extern double frexp ( double x, int *n);
/* extern double frexp ( double x, int *pw2 ); */
extern double ldexp ( double x, int pw2 );
/* extern int signbit ( double x ); */
/* extern int isnan ( double x ); */
/* extern int isfinite ( double x ); */
extern int fresnl ( double xxa, double *x, double *y);
extern double gamma ( double x );
extern double lgam ( double x );
extern double gdtr ( double a, double b, double x );
extern double gdtrc ( double a, double b, double x );
extern double hyp2f1 ( double a, double b, double c, double x );
extern double hyperg ( double a, double b, double x );
extern double hyp2f0 ( double a, double b, double x, int type, double *y );
extern double i0 ( double x );
extern double i0e ( double x );
extern double i1 ( double x );
extern double i1e ( double x );
extern double igamc ( double a, double x );
extern double igam ( double a, double x );
extern double igami ( double a, double y0 );
extern double incbet ( double aa, double bb, double xx );
extern double incbi ( double aa, double bb, double yy0 );
extern double iv ( double v, double x );
extern double j0 ( double x );
extern double y0 ( double x );
extern double j1 ( double x );
extern double y1 ( double x );
extern double jn ( int n, double x );
extern double jv ( double n, double x );
extern double k0 ( double x );
extern double k0e ( double x );
extern double k1 ( double x );
extern double k1e ( double x );
extern double kn ( int nn, double x );
extern double log ( double x );
extern double log10 ( double x );
extern double log2 ( double x );
extern long lrand ( void );
extern long lsqrt ( long x );
extern int mtherr ( char *name, int code );
extern double polevl ( double x, void *P, int N );
extern double p1evl ( double x, void *P, int N );
extern double nbdtrc ( int k, int n, double p );
extern double nbdtr ( int k, int n, double p );
extern double nbdtri ( int k, int n, double p );
extern double ndtr ( double a );
extern double erfc ( double a );
extern double erf ( double x );
extern double ndtri ( double y0 );
extern double pdtrc ( int k, double m );
extern double pdtr ( int k, double m );
extern double pdtri ( int k, double y );
extern double pow ( double x, double y );
extern double powi ( double x, int nn );
extern double psi ( double x );
extern double rgamma ( double x );
extern double round ( double x );
extern int shichi ( double x, double *y, double *z );
extern int sici ( double x, double *y, double *z );
extern double sin ( double x );
extern double cos ( double x );
extern double radian ( double d, double m, double s );
/*
extern int sincos ( double x, double *y, double *z, int flg );
*/
extern double sindg ( double x );
extern double cosdg ( double x );
extern double sinh ( double x );
extern double spence ( double x );
extern double sqrt ( double x );
extern double stdtr ( int k, double t );
extern double stdtri ( int k, double p );
extern double onef2 ( double a, double b, double c, double x, double *y );
extern double threef0 ( double a, double b, double c, double x, double *y );
extern double struve ( double v, double x );
extern double tan ( double x );
extern double cot ( double x );
extern double tandg ( double x );
extern double cotdg ( double x );
extern double tanh ( double x );
extern double log1p ( double x );
extern double expm1 ( double x );
extern double cosm1 ( double x );
extern double yn ( int n, double x );
extern double yv ( double n, double x );
extern double zeta ( double x, double q );
extern double zetac ( double x );
extern int drand ( double *x );

extern double plancki(double w, double T);

extern void polini( int maxdeg );
extern void polclr ( double * A, int n);
extern void polmov ( double * A, int na, double * B );
extern void polmul ( double * A, int na, double * B, int nb, double * C );
extern int poldiv ( double * A, int na, double * B, int nb, double * C);
extern void poladd ( double * A, int na, double * B, int nb, double * C );
extern void polsub ( double * A, int na, double * B, int nb, double * C );
extern void polsbt ( double * A, int na, double * B, int nb, double * C );
extern void polprt ( double * A, int na, int d );
extern double poleva (double * A, int na, double x);
extern void polatn(double * A, double * B, double * C, int n);
extern void polsqt(double * A, double * B, int n);
extern void polsin(double * A, double * B, int n);
extern void polcos(double * A, double * B, int n);
extern int polrt_wrap(double * xcof, double * cof, int m, double * r, double * i);

extern void bernum_wrap(double * num, double * den);
extern double simpsn_wrap(double * f, int n, double h);
extern int minv(double * A, double * X, int n, double * B, int * IPS);
extern void mtransp(int n, double * A, double * X);
extern void eigens(double * A, double * EV, double * E, int n);
extern int simq(double * A, double * B, double * X, int n, int flag, int * IPS);
extern double polylog(int n, double x);
extern double arcdot(double * p, double * q);
extern double expx2(double x, int sign);
