/*  DO NOT EDIT THIS FILE.

    It has been auto-edited by fixincludes from:

	"fixinc/tests/inc/math.h"

    This had to be done to correct non-standard usages in the
    original, manufacturer supplied header file.  */

#ifndef FIXINC_WRAP_MATH_H_MATH_EXCEPTION
#define FIXINC_WRAP_MATH_H_MATH_EXCEPTION 1

#ifdef __cplusplus
#define exception __math_exception
#endif
#ifndef FIXINC_WRAP_MATH_H_EXCEPTION_STRUCTURE
#define FIXINC_WRAP_MATH_H_EXCEPTION_STRUCTURE 1

struct exception;


#if defined( AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_2_CHECK )
#include <architecture/ppc/math.h>
#endif  /* AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_2_CHECK */


#if defined( BROKEN_CABS_CHECK )
#ifdef __STDC__

#else

#endif

 /* This is a comment
                         and it ends here. */


#endif  /* BROKEN_CABS_CHECK */


#if defined( EXCEPTION_STRUCTURE_CHECK )
extern int matherr();
#endif  /* EXCEPTION_STRUCTURE_CHECK */


#if defined( HPUX11_CPP_POW_INLINE_CHECK )

#endif  /* HPUX11_CPP_POW_INLINE_CHECK */


#if defined( HPUX11_FABSF_CHECK )
#ifdef _PA_RISC
#ifndef __cplusplus
#  define fabsf(x) ((float)fabs((double)(float)(x)))
#endif
#endif
#endif  /* HPUX11_FABSF_CHECK */


#if defined( HPUX8_BOGUS_INLINES_CHECK )
extern "C" int abs(int);

#endif  /* HPUX8_BOGUS_INLINES_CHECK */


#if defined( ISC_FMOD_CHECK )
extern double	fmod(double, double);
#endif  /* ISC_FMOD_CHECK */


#if defined( MATH_EXCEPTION_CHECK )
typedef struct exception t_math_exception;
#endif  /* MATH_EXCEPTION_CHECK */


#if defined( MATH_HUGE_VAL_FROM_DBL_MAX_CHECK )

#define HUGE_VAL 3.1415e+9 /* really big */
#endif  /* MATH_HUGE_VAL_FROM_DBL_MAX_CHECK */


#if defined( RS6000_DOUBLE_CHECK )
#ifndef __cplusplus
extern int class();
#endif
#endif  /* RS6000_DOUBLE_CHECK */


#if defined( SCO_MATH_CHECK )
#define __fp_class(a) \
 __builtin_generic(a,"ld:__fplcassifyl;f:__fpclassifyf;:__fpclassify")

#endif  /* SCO_MATH_CHECK */


#if defined( STRICT_ANSI_NOT_CTD_CHECK )
#if 1 && \
&& defined(mumbling) |& ( !defined(__STRICT_ANSI__)) \
(  !defined(__STRICT_ANSI__) && !defined(_XOPEN_SOURCE) \
||  !defined(__STRICT_ANSI__) ) /* not std C */
int foo;
#endif
#endif  /* STRICT_ANSI_NOT_CTD_CHECK */


#if defined( ULTRIX_ATOF_PARAM_CHECK )
extern double atof(const char *__nptr);

#endif  /* ULTRIX_ATOF_PARAM_CHECK */


#if defined( WINDISS_MATH1_CHECK )
#ifndef __GNUC__
#endif  /* WINDISS_MATH1_CHECK */


#if defined( WINDISS_MATH2_CHECK )
#endif /* __GNUC__ */
#endif  /* WINDISS_MATH2_CHECK */

#endif  /* FIXINC_WRAP_MATH_H_EXCEPTION_STRUCTURE */
#ifdef __cplusplus
#undef exception
#endif

#endif  /* FIXINC_WRAP_MATH_H_MATH_EXCEPTION */
