#ifndef _MATH_H
#define _MATH_H

#ifndef _COMPILER_H
#include <compiler.h>
#endif

__EXTERN double atof	__PROTO((const char *));
__EXTERN double acosh	__PROTO((double));
__EXTERN double asinh	__PROTO((double));
__EXTERN double atanh	__PROTO((double));
__EXTERN double acos	__PROTO((double));
__EXTERN double asin	__PROTO((double));
__EXTERN double atan	__PROTO((double));
__EXTERN double atan2	__PROTO((double, double));
__EXTERN double ceil	__PROTO((double));
__EXTERN double cos	__PROTO((double));
__EXTERN double cosh	__PROTO((double));
__EXTERN double exp	__PROTO((double));
__EXTERN double fabs	__PROTO((double));
__EXTERN double floor	__PROTO((double));
__EXTERN double fmod	__PROTO((double, double));
__EXTERN double frexp	__PROTO((double, int *));
__EXTERN double ldexp	__PROTO((double, int));
__EXTERN double log	__PROTO((double));
__EXTERN double log10	__PROTO((double));
__EXTERN double modf	__PROTO((double, double *));
__EXTERN double pow	__PROTO((double, double));
__EXTERN double sin	__PROTO((double));
__EXTERN double sinh	__PROTO((double));
__EXTERN double sqrt	__PROTO((double));
__EXTERN double tan	__PROTO((double));
__EXTERN double tanh	__PROTO((double));

#ifndef __STRICT_ANSI__
__EXTERN int	finite	__PROTO((double));
__EXTERN double cbrt	__PROTO((double));
__EXTERN double copysign __PROTO((double, double));
__EXTERN double drem	__PROTO((double, double));
__EXTERN double logb	__PROTO((double));
__EXTERN double scalb	__PROTO((double, int));
__EXTERN double rint	__PROTO((double));
__EXTERN double expm1	__PROTO((double));
__EXTERN double log1p	__PROTO((double));
__EXTERN double hypot	__PROTO((double, double));
__EXTERN double cabs();
#endif

extern const double _infinitydf;	/* in normdf.cpp */
#define HUGE_VAL _infinitydf

/* other compilers?? */

#ifndef __STRICT_ANSI__
#define HUGE HUGE_VAL
#endif

/* other stuff */
#ifdef _M68881
#include <fpu.h>
#endif

#ifndef __STRICT_ANSI__
#if __GNUC__
#ifndef max
#define max(x,y) ({typeof(x) _x=(x); typeof(y) _y=(y); if (_x>_y) _y=_x; _y;})
#define min(x,y) ({typeof(x) _x=(x); typeof(y) _y=(y); if (_x<_y) _y=_x; _y;})
#endif
#else
/* these forms evaluate their args twice.. tough. */
#ifndef max
#define max(x,y) ((x) > (y) ? (x) : (y))
#define min(x,y) ((x) < (y) ? (x) : (y))
#endif
#endif

#endif /* __STRICT_ANSI__ */

#endif /* _MATH_H
