Boost logo

Boost :

From: Jim Douglas (jim_at_[hidden])
Date: 2005-12-05 17:20:37


John,

The attached header files may be of interest. A comment in ymath.h
suggests that the value returned conforms to the C9X standard.

Let me know if you still think it is erroneous.

Jim

Jim Douglas wrote:
> John Maddock wrote:
>
>>>Testing type float
>>>classify.cc(130): error in "test_main_caller( argc, argv )": check
>>>(::pending::fpclassify)(t) == (int)(-2) failed [-1 != -2]
>>>classify.cc(131): error in "test_main_caller( argc, argv )": check
>>>(::pending::fpclassify)(-t) == (int)(-2) failed [-1 != -2]
>>
>>
>>>*** 6 failures detected in test suite "Test Program"
>>
>>
>>Worrying: the results indicate that the platform has native support for
>>fpclassify, and that it doesn't work (doesn't detect denorms).
>
>
> Just explain that in slightly more detail and I will raise a support
> ticket with QNX.
>
> Thanks
> Jim
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>


/* math.h standard header */
#ifndef _MATH
#define _MATH
#ifndef _YMATH
 #include <ymath.h>
#endif /* _YMATH */

#include <_pack64.h>

_C_STD_BEGIN

/*
 * XOPEN/SVID
 */
#if defined(__EXT_XOPEN_EX)

#define M_E 2.7182818284590452354 /* e */
#define M_LOG2E 1.4426950408889634074 /* log 2e */
#define M_LOG10E 0.43429448190325182765 /* log 10e */
#define M_LN2 0.69314718055994530942 /* log e2 */
#define M_LN10 2.30258509299404568402 /* log e10 */
#define M_PI 3.14159265358979323846 /* pi */
#define M_PI_2 1.57079632679489661923 /* pi/2 */
#define M_PI_4 0.78539816339744830962 /* pi/4 */
#define M_1_PI 0.31830988618379067154 /* 1/pi */
#define M_2_PI 0.63661977236758134308 /* 2/pi */
#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */
#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */

#define MAXFLOAT ((float)3.40282346638528860e+38)

#endif

                /* CODES FOR is* FUNCTIONS */
#define _FP_LT 1
#define _FP_EQ 2
#define _FP_GT 4

                /* CODES FOR ilogb FUNCTIONS */

 #if _ILONG
  #define _FP_ILOGB0 (-0x7fffffff - _C2)
  #define _FP_ILOGBNAN 0x7fffffff

 #else /* _ILONG */
  #define _FP_ILOGB0 (-0x7fff - _C2)
  #define _FP_ILOGBNAN 0x7fff
 #endif /* _ILONG */

 #if _HAS_C9X || (2 <= __GNUC__)
                /* TYPES */

 #if _FEVAL == 1
typedef double float_t;
typedef double double_t;

 #elif _FEVAL == 2
typedef long double float_t;
typedef long double double_t;

 #else /* _FEVAL */
typedef float float_t;
typedef double double_t;
 #endif /* _FEVAL */

                /* MACROS */

 #if 245 < __EDG_VERSION__ && !defined(__cplusplus)
  #define HUGE_VAL ((double)__INFINITY__)
  #define HUGE_VALF __INFINITY__
  #define HUGE_VALL ((long double)__INFINITY__)
  #define INFINITY __INFINITY__
  #define NAN __NAN__

 #elif defined(__EDG__) || 0 < _MSC_VER
  #define HUGE_VAL _CSTD _Inf._Double
  #define HUGE_VALF _CSTD _FInf._Float
  #define HUGE_VALL _CSTD _LInf._Long_double
  #define INFINITY _CSTD _FInf._Float
  #define NAN _CSTD _FNan._Float

 #else /* !defined(__EDG__) */
  #ifndef _HUGE_ENUF
   #define _HUGE_ENUF 1e+30F /* _HUGE_ENUF*_HUGE_ENUF must overflow */
  #endif /* _HUGE_ENUF */

  #define HUGE_VAL ((double)INFINITY)
  #define HUGE_VALF ((float)INFINITY)
  #define HUGE_VALL ((long double)INFINITY)
  #define INFINITY ((float)(_HUGE_ENUF * _HUGE_ENUF))
  #define NAN ((float)(INFINITY * 0.0F))
 #endif /* 245 < __EDG_VERSION__ */

#define FP_INFINITE _INFCODE
#define FP_NAN _NANCODE
#define FP_NORMAL _FINITE
#define FP_SUBNORMAL _DENORM
#define FP_ZERO 0

 #if _HAS_C9X_FAST_FMA
  #define FP_FAST_FMA 1
  #define FP_FAST_FMAF 1
  #define FP_FAST_FMAL 1
 #endif /* _HAS_C9X_FAST_FMA */

 #define FP_ILOGB0 _FP_ILOGB0
 #define FP_ILOGBNAN _FP_ILOGBNAN

#define MATH_ERRNO 1
#define MATH_ERREXCEPT 2
#define math_errhandling (MATH_ERRNO | MATH_ERREXCEPT) /* do both */

_C_LIB_DECL
int _FFpcomp(float, float);
int _Fpcomp(double, double);
int _LFpcomp(long double, long double);

int _FDclass(float);
int _Dclass(double);
int _LDclass(long double);

int _FDsign(float);
int _Dsign(double);
int _LDsign(long double);
_END_C_LIB_DECL

 #if defined(__cplusplus) && !__embedded_cplusplus /* DON'T SIMPLIFY! */
  #define _FPCOMP_template 1

 #else /* defined(__cplusplus) && !__embedded_cplusplus */
  #define _FPCOMP_template 0
 #endif /* defined(__cplusplus) && !__embedded_cplusplus */

 #if _FPCOMP_template
                // TEMPLATE CLASS _Rc_type
template<class _Ty>
        struct _Rc_type
        { // determine if type is real or complex
        typedef float _Type; // default is real
        };

                // TEMPLATE CLASS _Rc_widened
template<class _Ty, class _T2>
        struct _Rc_widened
        { // determine real/complex type
        typedef float _Type; // (real, real) is real
        };

                // TEMPLATE CLASS _Real_type

 #if defined(__SUNPRO_CC) /* compiler test */
template<class _Ty>
        struct _Real_type;

template<> struct _Real_type<int>
        { // determine equivalent real type
        typedef double _Type;
        };

template<> struct _Real_type<unsigned int>
        { // determine equivalent real type
        typedef double _Type;
        };

template<> struct _Real_type<long>
        { // determine equivalent real type
        typedef double _Type;
        };

template<> struct _Real_type<unsigned long>
        { // determine equivalent real type
        typedef double _Type;
        };

template<> struct _Real_type<double>
        { // determine equivalent real type
        typedef double _Type;
        };

 #else /* defined(__SUNPRO_CC) */
template<class _Ty>
        struct _Real_type
        { // determine equivalent real type
        typedef double _Type; // default is double
        };
 #endif /* defined(__SUNPRO_CC) */

template<> struct _Real_type<float>
        { // determine equivalent real type
        typedef float _Type;
        };

template<> struct _Real_type<long double>
        { // determine equivalent real type
        typedef long double _Type;
        };

                // TEMPLATE CLASS _Real_widened
template<class _Ty, class _T2>
        struct _Real_widened
        { // determine widened real type
        typedef long double _Type; // default is long double
        };

template<> struct _Real_widened<float, float>
        { // determine widened real type
        typedef float _Type;
        };

template<> struct _Real_widened<float, double>
        { // determine widened real type
        typedef double _Type;
        };

template<> struct _Real_widened<double, float>
        { // determine widened real type
        typedef double _Type;
        };

template<> struct _Real_widened<double, double>
        { // determine widened real type
        typedef double _Type;
        };

                // TEMPLATE CLASS _Combined_type
template<class _Trc, class _Tre>
        struct _Combined_type
        { // determine combined type
        typedef float _Type; // (real, float) is float
        };

template<> struct _Combined_type<float, double>
        { // determine combined type
        typedef double _Type;
        };

template<> struct _Combined_type<float, long double>
        { // determine combined type
        typedef long double _Type;
        };

                // TEMPLATE FUNCTION _FPCOMP
inline int _FPCOMP(float _Left, float _Right)
        { // compare _Left and _Right
        return (_FFpcomp(_Left, _Right));
        }

inline int _FPCOMP(double _Left, double _Right)
        { // compare _Left and _Right
        return (_Fpcomp(_Left, _Right));
        }

inline int _FPCOMP(long double _Left, long double _Right)
        { // compare _Left and _Right
        return (_LFpcomp(_Left, _Right));
        }

template<class _T1, class _T2> inline
        int _FPCOMP(_T1 _Left, _T2 _Right)
        { // compare _Left and _Right
        typedef typename _Combined_type<float,
                typename _Real_widened<
                        typename _Real_type<_T1>::_Type,
                        typename _Real_type<_T2>::_Type>::_Type>::_Type _Tw;
        return (_FPCOMP((_Tw)_Left, (_Tw)_Right));
        }

                // FUNCTION fpclassify
inline int fpclassify(float _Left)
        { // classify argument
        return (_FDtest(&_Left));
        }

inline int fpclassify(double _Left)
        { // classify argument
        return (_Dtest(&_Left));
        }

inline int fpclassify(long double _Left)
        { // classify argument
        return (_LDtest(&_Left));
        }

                // FUNCTION signbit
inline bool signbit(float _Left)
        { // test sign bit
        return (_FDsign(_Left) != 0);
        }

inline bool signbit(double _Left)
        { // test sign bit
        return (_Dsign(_Left) != 0);
        }

inline bool signbit(long double _Left)
        { // test sign bit
        return (_LDsign(_Left) != 0);
        }

template<class _Ty> inline
        bool isfinite(_Ty _Left)
        { // test for finite
        return (fpclassify(_Left) <= 0);
        }

template<class _Ty> inline
        bool isinf(_Ty _Left)
        { // test for infinite
        return (fpclassify(_Left) == FP_INFINITE);
        }

template<class _Ty> inline
        bool isnan(_Ty _Left)
        { // test for NaN
        return (fpclassify(_Left) == FP_NAN);
        }

template<class _Ty> inline
        bool isnormal(_Ty _Left)
        { // test for normal
        return (fpclassify(_Left) == FP_NORMAL);
        }

template<class _Ty1, class _Ty2> inline
        bool isgreater(_Ty1 _Left, _Ty2 _Right)
        { // test for _Left > _Right
        return ((_FPCOMP(_Left, _Right) & _FP_GT) != 0);
        }

template<class _Ty1, class _Ty2> inline
        bool isgreaterequal(_Ty1 _Left, _Ty2 _Right)
        { // test for _Left >= _Right
        return ((_FPCOMP(_Left, _Right) & (_FP_EQ | _FP_GT)) != 0);
        }

template<class _Ty1, class _Ty2> inline
        bool isless(_Ty1 _Left, _Ty2 _Right)
        { // test for _Left < _Right
        return ((_FPCOMP(_Left, _Right) & _FP_LT) != 0);
        }

template<class _Ty1, class _Ty2> inline
        bool islessequal(_Ty1 _Left, _Ty2 _Right)
        { // test for _Left <= _Right
        return ((_FPCOMP(_Left, _Right) & (_FP_LT | _FP_EQ)) != 0);
        }

template<class _Ty1, class _Ty2> inline
        bool islessgreater(_Ty1 _Left, _Ty2 _Right)
        { // test for _Left != _Right
        return ((_FPCOMP(_Left, _Right) & (_FP_LT | _FP_GT)) != 0);
        }

template<class _Ty1, class _Ty2> inline
        bool isunordered(_Ty1 _Left, _Ty2 _Right)
        { // test for _Left unorderd w.r.t. _Right
        return (_FPCOMP(_Left, _Right) == 0);
        }

  #define fpclassify(x) (_CSTD fpclassify(x))
  #define signbit(x) (_CSTD signbit(x))
  #define isfinite(x) (_CSTD isfinite(x))
  #define isinf(x) (_CSTD isinf(x))
  #define isnan(x) (_CSTD isnan(x))
  #define isnormal(x) (_CSTD isnormal(x))
  #define isgreater(x, y) (_CSTD isgreater(x, y))
  #define isgreaterequal(x, y) (_CSTD isgreaterequal(x, y))
  #define isless(x, y) (_CSTD isless(x, y))
  #define islessequal(x, y) (_CSTD islessequal(x, y))
  #define islessgreater(x, y) (_CSTD islessgreater(x, y))
  #define isunordered(x, y) (_CSTD isunordered(x, y))

 #else /* _FPCOMP_template */

  #if __EDG__
   #define _CARGI(x, fd, ff, fl) \
        __generic(x,,, fd, ff, fl,,,)(x)
   #define _CARG2I(x, y, fd, ff, fl) \
        __generic(x, y,, fd, ff, fl,,,)(x, y)

  #elif 2 <= __GNUC__
   #define _FLT_TYPE(expression) _FLT_OR_DBL(__typeof__ (expression))
   #define _FLT_OR_DBL(mytype) __typeof__ (*(0 \
        ? (__typeof__ (0 ? (mytype *)0 : (void *)((mytype)0.5 == 0)))0 \
        : (__typeof__ (0 ? (double *)0 : (void *)((mytype)0.5 != 0)))0))

   #define _CARGI(x, fd, ff, fl) \
        (__extension__({ \
        int _Ans; \
        if (sizeof (_FLT_TYPE(x)) == sizeof (double)) \
                _Ans = fd(x); \
        else if (sizeof (_FLT_TYPE(x)) == sizeof (float)) \
        _Ans = ff(x); \
        else \
                _Ans = fl(x); \
        _Ans; \
        }))
   #define _CARG2I(x, y, fd, ff, fl) \
        (__extension__({ \
        int _Ans; \
        if (sizeof (_FLT_TYPE((x) + (y))) == sizeof (double)) \
                _Ans = fd(x, y); \
        else if (sizeof (_FLT_TYPE((x) + (y))) == sizeof (float)) \
                _Ans = ff(x, y); \
        else \
                _Ans = fl(x, y); \
        _Ans; \
        }))

  #else /* compiler type */
   #define _ARG(x) (sizeof ((x) + (float)0) == sizeof (float) ? 'f' \
        : sizeof ((x) + (double)0) == sizeof (double) ? 'd' \
        : 'l')
   #define _CARGI(x, fd, ff, fl) \
        (_ARG(x) == 'f' ? ff((float)(x)) \
        : _ARG(x) == 'd' ? fd((double)(x)) \
        : fl((long double)(x)))
   #define _CARG2I(x, y, fd, ff, fl) \
        (_ARG((x) + (y)) == 'f' ? ff((float)(x), (float)(y)) \
        : _ARG((x) + (y)) == 'd' ? fd((double)(x), (double)(y)) \
        : fl((long double)(x), (long double)(y)))
  #endif /* compiler type */

  #define _FPCOMP(x, y) \
        _CARG2I(x, y, _Fpcomp, _FFpcomp, _LFpcomp)
  #define fpclassify(x) \
        _CARGI(x, _Dclass, _FDclass, _LDclass)
  #define signbit(x) \
        _CARGI(x, _Dsign, _FDsign, _LDsign)

#define isfinite(x) (fpclassify(x) <= 0)
#define isinf(x) (fpclassify(x) == FP_INFINITE)
#define isnan(x) (fpclassify(x) == FP_NAN)
#define isnormal(x) (fpclassify(x) == FP_NORMAL)

#define isgreater(x, y) ((_FPCOMP(x, y) & _FP_GT) != 0)
#define isgreaterequal(x, y) \
        ((_FPCOMP(x, y) & (_FP_EQ | _FP_GT)) != 0)
#define isless(x, y) ((_FPCOMP(x, y) & _FP_LT) != 0)
#define islessequal(x, y) ((_FPCOMP(x, y) & (_FP_LT | _FP_EQ)) != 0)
#define islessgreater(x, y) \
        ((_FPCOMP(x, y) & (_FP_LT | _FP_GT)) != 0)
#define isunordered(x, y) (_FPCOMP(x, y) == 0)
 #endif /* _FPCOMP_template */

 #else /* _IS_C9X */
                /* MACROS */
 #define HUGE_VAL _CSTD _Hugeval._Double
 #endif /* _IS_C9X */

_C_LIB_DECL

                /* double declarations */
double acos(double);
double asin(double);
double atan(double);
double atan2(double, double);
double ceil(double);
double exp(double);
double fabs(double);
double floor(double);
double fmod(double, double);
double frexp(double, int *);
double ldexp(double, int);
double modf(double, double *);
double pow(double, double);
double sqrt(double);
double tan(double);
double tanh(double);

 #if _HAS_C9X
double acosh(double);
double asinh(double);
double atanh(double);
double cbrt(double);
double copysign(double, double);
double erf(double);
double erfc(double);
double exp2(double);
double expm1(double);
double fdim(double, double);
double fma(double, double, double);
double fmax(double, double);
double fmin(double, double);
double hypot(double, double);
int ilogb(double);
double lgamma(double);
_Longlong llrint(double);
_Longlong llround(double);
double log1p(double);
double logb(double);
long lrint(double);
long lround(double);
double nan(const char *);
double nearbyint(double);
double nextafter(double, double);
double nexttoward(double, long double);
double remainder(double, double);
double remquo(double, double, int *);
double rint(double);
double round(double);
double scalbn(double, int);
double scalbln(double, long);
double tgamma(double);
double trunc(double);
 #endif /* _IS_C9X */

double lgamma_r(double,int*);
float lgammaf_r(float,int*);
long double lgammal_r(long double,int*);

                /* Deprecated functions, use C99 lgamma*() functions instead */
float gammaf(float) __attribute__((__const__,__deprecated__));
float gammaf_r(float,int*) __attribute__((__const__,__deprecated__));
double gamma(double) __attribute__((__const__,__deprecated__));
double gamma_r(double,int*) __attribute__((__const__,__deprecated__));

                /* Compatibility functions */
int finite(double) __attribute__((__const__,__deprecated__)); /* use isfinite macro */
int finitef(float) __attribute__((__const__,__deprecated__)); /* use isfinite macro */
int isinff(float) __attribute__((__const__,__deprecated__)); /* use isinf macro */
int isnanf(float) __attribute__((__const__,__deprecated__)); /* use isnan macro */
double drem(double, double) __attribute__((__const__,__deprecated__)); /* use remainder */
float dremf(float, float) __attribute__((__const__,__deprecated__)); /* use remainder */
float significandf(float) __attribute__((__const__,__deprecated__)); /* use scalbn(x, -ilogb(x) */
double significand(double) __attribute__((__const__,__deprecated__)); /* use scalbnf(x, -ilogbf(x) */
float scalbf(float, float) __attribute__((__const__,__deprecated__)); /* use scalbn */

                /* XSI Obsolete functions */
double scalb(double, double) __attribute__((__const__));

                /* float declarations */
float acosf(float);
float asinf(float);
float atanf(float);
float atan2f(float, float);
float ceilf(float);
float expf(float);
float fabsf(float);
float floorf(float);
float fmodf(float, float);
float frexpf(float, int *);
float ldexpf(float, int);
float modff(float, float *);
float powf(float, float);
float sqrtf(float);
float tanf(float);
float tanhf(float);

 #if _HAS_C9X
float acoshf(float);
float asinhf(float);
float atanhf(float);
float cbrtf(float);
float copysignf(float, float);
float erff(float);
float erfcf(float);
float expm1f(float);
float exp2f(float);
float fdimf(float, float);
float fmaf(float, float, float);
float fmaxf(float, float);
float fminf(float, float);
float hypotf(float, float);
int ilogbf(float);
float lgammaf(float);
_Longlong llrintf(float);
_Longlong llroundf(float);
float log1pf(float);
float logbf(float);
long lrintf(float);
long lroundf(float);
float nanf(const char *);
float nearbyintf(float);
float nextafterf(float, float);
float nexttowardf(float, long double);
float remainderf(float, float);
float remquof(float, float, int *);
float rintf(float);
float roundf(float);
float scalbnf(float, int);
float scalblnf(float, long);
float tgammaf(float);
float truncf(float);
 #endif /* _IS_C9X */

                /* long double declarations */
long double acosl(long double);
long double asinl(long double);
long double atanl(long double);
long double atan2l(long double, long double);
long double ceill(long double);
long double expl(long double);
long double fabsl(long double);
long double floorl(long double);
long double fmodl(long double, long double);
long double frexpl(long double, int *);
long double ldexpl(long double, int);
long double modfl(long double, long double *);
long double powl(long double, long double);
long double sqrtl(long double);
long double tanl(long double);
long double tanhl(long double);

 #if _HAS_C9X
long double acoshl(long double);
long double asinhl(long double);
long double atanhl(long double);
long double cbrtl(long double);
long double copysignl(long double, long double);
long double erfl(long double);
long double erfcl(long double);
long double exp2l(long double);
long double expm1l(long double);
long double fdiml(long double, long double);
long double fmal(long double, long double, long double);
long double fmaxl(long double, long double);
long double fminl(long double, long double);
long double hypotl(long double, long double);
int ilogbl(long double);
long double lgammal(long double);
_Longlong llrintl(long double);
_Longlong llroundl(long double);
long double log1pl(long double);
long double logbl(long double);
long lrintl(long double);
long lroundl(long double);
long double nanl(const char *);
long double nearbyintl(long double);
long double nextafterl(long double, long double);
long double nexttowardl(long double, long double);
long double remainderl(long double, long double);
long double remquol(long double, long double, int *);
long double rintl(long double);
long double roundl(long double);
long double scalbnl(long double, int);
long double scalblnl(long double, long);
long double tgammal(long double);
long double truncl(long double);
 #endif /* _IS_C9X */

_END_C_LIB_DECL

 #if defined(__cplusplus) && !defined(_NO_CPP_INLINES)

 #if _IS_EMBEDDED

 #else /* _IS_EMBEDDED */
                // TEMPLATE FUNCTION _Pow_int
template<class _Ty> inline
        _Ty _Pow_int(_Ty _Left, int _Right)
        { // raise to integer power
        unsigned int _Num = _Right;
        if (_Right < 0)
                _Num = 0 - _Num;

        for (_Ty _Ans = 1; ; _Left *= _Left)
                { // scale and fold in factors
                if ((_Num & 1) != 0)
                        _Ans *= _Left;
                if ((_Num >>= 1) == 0)
                        return (0 <= _Right ? _Ans
                                : _Ans == _Ty(0) ? HUGE_VAL : _Ty(1) / _Ans);
                }
        }
 #endif /* _IS_EMBEDDED */

                // double INLINES, FOR C++
_C_LIB_DECL
inline double cos(double _Left)
        { // return cosine
        return (_Sin(_Left, 1));
        }

inline double cosh(double _Left)
        { // return hyperbolic cosine
        return (_Cosh(_Left, 1));
        }

inline double log(double _Left)
        { // return natural logarithm
        return (_Log(_Left, 0));
        }

inline double log10(double _Left)
        { // return base-10 logarithm
        return (_Log(_Left, 1));
        }

inline double sin(double _Left)
        { // return sine
        return (_Sin(_Left, 0));
        }

inline double sinh(double _Left)
        { // return hyperbolic sine
        return (_Sinh(_Left, 1));
        }

 #if _HAS_C9X
inline double log2(double _Left)
        { // return base-2 logarithm
        return (_Log(_Left, -1));
        }
 #endif /* _IS_C9X */

_END_C_LIB_DECL

inline double abs(double _Left) // OVERLOADS
        { // return absolute value
        return (fabs(_Left));
        }

 #if _IS_EMBEDDED
inline double pow(double _Left, int _Right)
        { // raise to integer power
        unsigned int _Num = _Right;
        if (_Right < 0)
                _Num = 0 - _Num;

        for (double _Ans = 1; ; _Left *= _Left)
                {if ((_Num & 1) != 0)
                        _Ans *= _Left;
                if ((_Num >>= 1) == 0)
                        return (_Right < 0 ? (double)(1) / _Ans : _Ans);
                }
        }

 #else /* _IS_EMBEDDED */
inline double pow(double _Left, int _Right)
        { // raise to integer power
        return (_Pow_int(_Left, _Right));
        }
 #endif /* _IS_EMBEDDED */

                // float INLINES, FOR C++
_C_LIB_DECL
inline float cosf(float _Left)
        { // return cosine
        return (_FSin(_Left, 1));
        }

inline float coshf(float _Left)
        { // return hyperbolic cosine
        return (_FCosh(_Left, 1));
        }

inline float logf(float _Left)
        { // return natural logarithm
        return (_FLog(_Left, 0));
        }

inline float log10f(float _Left)
        { // return base-10 logarithm
        return (_FLog(_Left, 1));
        }

inline float sinf(float _Left)
        { // return sine
        return (_FSin(_Left, 0));
        }

inline float sinhf(float _Left)
        { // return hyperbolic sine
        return (_FSinh(_Left, 1));
        }

 #if _HAS_C9X
inline float log2f(float _Left)
        { // return base-2 logarithm
        return (_FLog(_Left, -1));
        }
 #endif /* _IS_C9X */

_END_C_LIB_DECL

inline float abs(float _Left) // OVERLOADS
        { // return absolute value
        return (fabsf(_Left));
        }

inline float acos(float _Left)
        { // return arccosine
        return (acosf(_Left));
        }

inline float asin(float _Left)
        { // return arcsine
        return (asinf(_Left));
        }

inline float atan(float _Left)
        { // return arctangent
        return (atanf(_Left));
        }

inline float atan2(float _Left, float _Right)
        { // return arctangent
        return (atan2f(_Left, _Right));
        }

inline float ceil(float _Left)
        { // return ceiling
        return (ceilf(_Left));
        }

inline float cos(float _Left)
        { // return cosine
        return (_FSin(_Left, 1));
        }

inline float cosh(float _Left)
        { // return hyperbolic cosine
        return (_FCosh(_Left, 1));
        }

inline float exp(float _Left)
        { // return exponential
        return (expf(_Left));
        }

inline float fabs(float _Left)
        { // return absolute value
        return (fabsf(_Left));
        }

inline float floor(float _Left)
        { // return floor
        return (floorf(_Left));
        }

inline float fmod(float _Left, float _Right)
        { // return modulus
        return (fmodf(_Left, _Right));
        }

inline float frexp(float _Left, int *_Right)
        { // unpack exponent
        return (frexpf(_Left, _Right));
        }

inline float ldexp(float _Left, int _Right)
        { // pack exponent
        return (ldexpf(_Left, _Right));
        }

inline float log(float _Left)
        { // return natural logarithm
        return (_FLog(_Left, 0));
        }

inline float log10(float _Left)
        { // return base-10 logarithm
        return (_FLog(_Left, 1));
        }

inline float modf(float _Left, float *_Right)
        { // unpack fraction
        return (modff(_Left, _Right));
        }

inline float pow(float _Left, float _Right)
        { // raise to power
        return (powf(_Left, _Right));
        }

 #if _IS_EMBEDDED
inline float pow(float _Left, int _Right)
        { // raise to integer power
        unsigned int _Num = _Right;
        if (_Right < 0)
                _Num = 0 - _Num;

        for (float _Ans = 1; ; _Left *= _Left)
                {if ((_Num & 1) != 0)
                        _Ans *= _Left;
                if ((_Num >>= 1) == 0)
                        return (_Right < 0 ? (float)(1) / _Ans : _Ans);
                }
        }

 #else /* _IS_EMBEDDED */
inline float pow(float _Left, int _Right)
        { // raise to integer power
        return (_Pow_int(_Left, _Right));
        }
 #endif /* _IS_EMBEDDED */

inline float sin(float _Left)
        { // return sine
        return (_FSin(_Left, 0));
        }

inline float sinh(float _Left)
        { // return hyperbolic sine
        return (_FSinh(_Left, 1));
        }

inline float sqrt(float _Left)
        { // return square root
        return (sqrtf(_Left));
        }

inline float tan(float _Left)
        { // return tangent
        return (tanf(_Left));
        }

inline float tanh(float _Left)
        { // return hyperbolic tangent
        return (tanhf(_Left));
        }

 #if _HAS_C9X
inline float acosh(float _Left)
        { // return hyperbolic arccosine
        return (acoshf(_Left));
        }

inline float asinh(float _Left)
        { // return hyperbolic arcsine
        return (asinhf(_Left));
        }

inline float atanh(float _Left)
        { // return hyperbolic arctangent
        return (atanhf(_Left));
        }

inline float cbrt(float _Left)
        { // return cube root
        return (cbrtf(_Left));
        }

inline float copysign(float _Left, float _Right)
        { // return copysign
        return (copysignf(_Left, _Right));
        }

inline float erf(float _Left)
        { // return erf
         return (erff(_Left)); }

inline float erfc(float _Left)
        { // return erfc
        return (erfcf(_Left));
        }

inline float exp2(float _Left)
        { // return exp2
        return (exp2f(_Left));
        }

inline float expm1(float _Left)
        { // return expml
        return (expm1f(_Left));
        }

inline float fdim(float _Left, float _Right)
        { // return fdim
        return (fdimf(_Left, _Right));
        }

inline float fma(float _Left, float _Right, float _Addend)
        { // return fma
        return (fmaf(_Left, _Right, _Addend));
        }

inline float fmax(float _Left, float _Right)
        { // return fmax
        return (fmaxf(_Left, _Right));
        }

inline float fmin(float _Left, float _Right)
        { // return fmin
        return (fminf(_Left, _Right));
        }

inline float hypot(float _Left, float _Right)
        { // return hypot
        return (hypotf(_Left, _Right));
        }

inline int ilogb(float _Left)
        { // return ilogb
        return (ilogbf(_Left));
        }

inline float lgamma(float _Left)
        { // return lgamma
        return (lgammaf(_Left));
        }

inline _Longlong llrint(float _Left)
        { // return llrint
        return (llrintf(_Left));
        }

inline _Longlong llround(float _Left)
        { // return llround
        return (llroundf(_Left));
        }

inline float log1p(float _Left)
        { // return loglp
        return (log1pf(_Left));
        }

inline float log2(float _Left)
        { // return log2
        return (_FLog(_Left, -1));
        }

inline float logb(float _Left)
        { // return logb
        return (logbf(_Left));
        }

inline long lrint(float _Left)
        { // return lrint
        return (lrintf(_Left));
        }

inline long lround(float _Left)
        { // return lround
        return (lroundf(_Left));
        }

inline float nearbyint(float _Left)
        { // return nearbyint
        return (nearbyintf(_Left));
        }

inline float nextafter(float _Left, float _Right)
        { // return nextafter
        return (nextafterf(_Left, _Right));
        }

inline float nexttoward(float _Left, long double _Right)
        { // return nexttoward
        return (nexttowardf(_Left, _Right));
        }

inline float remainder(float _Left, float _Right)
        { // return remainder
        return (remainderf(_Left, _Right));
        }

inline float remquo(float _Left, float _Right, int *_Pval)
        { // return remquo
        return (remquof(_Left, _Right, _Pval));
        }

inline float rint(float _Left)
        { // return rint
        return (rintf(_Left));
        }

inline float round(float _Left)
        { // return round
        return (roundf(_Left));
        }

inline float scalbn(float _Left, int _Right)
        { // return scalbn
        return (scalbnf(_Left, _Right));
        }

inline float scalbln(float _Left, long _Right)
        { // return scalbln
        return (scalblnf(_Left, _Right));
        }

inline float tgamma(float _Left)
        { // return tgamma
        return (tgammaf(_Left));
        }

inline float trunc(float _Left)
        { // return trunc
        return (truncf(_Left));
        }
 #endif /* _IS_C9X */

                // long double INLINES, FOR C++
_C_LIB_DECL
inline long double cosl(long double _Left)
        { // return cosine
        return (_LSin(_Left, 1));
        }

inline long double coshl(long double _Left)
        { // return hyperbolic cosine
        return (_LCosh(_Left, 1));
        }

inline long double logl(long double _Left)
        { // return natural logarithm
        return (_LLog(_Left, 0));
        }

inline long double log10l(long double _Left)
        { // return base-10 logarithm
        return (_LLog(_Left, 1));
        }

inline long double sinl(long double _Left)
        { // return sine
        return (_LSin(_Left, 0));
        }

inline long double sinhl(long double _Left)
        { // return hyperbolic sine
        return (_LSinh(_Left, 1));
        }

 #if _HAS_C9X
inline long double log2l(long double _Left)
        { // return base-2 logarithm
        return (_LLog(_Left, -1));
        }
 #endif /* _IS_C9X */

_END_C_LIB_DECL

inline long double abs(long double _Left) // OVERLOADS
        { // return absolute value
        return (fabsl(_Left));
        }

inline long double acos(long double _Left)
        { // return arccosine
        return (acosl(_Left));
        }

inline long double asin(long double _Left)
        { // return arcsine
        return (asinl(_Left));
        }

inline long double atan(long double _Left)
        { // return arctangent
        return (atanl(_Left));
        }

inline long double atan2(long double _Left, long double _Right)
        { // return arctangent
        return (atan2l(_Left, _Right));
        }

inline long double ceil(long double _Left)
        { // return ceiling
        return (ceill(_Left));
        }

inline long double cos(long double _Left)
        { // return cosine
        return (_LSin(_Left, 1));
        }

inline long double cosh(long double _Left)
        { // return hyperbolic cosine
        return (_LCosh(_Left, 1));
        }

inline long double exp(long double _Left)
        { // return exponential
        return (expl(_Left));
        }

inline long double fabs(long double _Left)
        { // return absolute value
        return (fabsl(_Left));
        }

inline long double floor(long double _Left)
        { // return floor
        return (floorl(_Left));
        }

inline long double fmod(long double _Left, long double _Right)
        { // return modulus
        return (fmodl(_Left, _Right));
        }

inline long double frexp(long double _Left, int *_Right)
        { // unpack exponent
        return (frexpl(_Left, _Right));
        }

inline long double ldexp(long double _Left, int _Right)
        { // pack exponent
        return (ldexpl(_Left, _Right));
        }

inline long double log(long double _Left)
        { // return natural logarithm
        return (_LLog(_Left, 0));
        }

inline long double log10(long double _Left)
        { // return base-10 logarithm
        return (_LLog(_Left, 1));
        }

inline long double modf(long double _Left, long double *_Right)
        { // unpack fraction
        return (modfl(_Left, _Right));
        }

inline long double pow(long double _Left, long double _Right)
        { // raise to power
        return (powl(_Left, _Right));
        }

 #if _IS_EMBEDDED
inline long double pow(long double _Left, int _Right)
        { // raise to integer power
        unsigned int _Num = _Right;
        if (_Right < 0)
                _Num = 0 - _Num;

        for (long double _Ans = 1; ; _Left *= _Left)
                {if ((_Num & 1) != 0)
                        _Ans *= _Left;
                if ((_Num >>= 1) == 0)
                        return (_Right < 0 ? (long double)(1) / _Ans : _Ans);
                }
        }

 #else /* _IS_EMBEDDED */
inline long double pow(long double _Left, int _Right)
        { // raise to integer power
        return (_Pow_int(_Left, _Right));
        }
 #endif /* _IS_EMBEDDED */

inline long double sin(long double _Left)
        { // return sine
        return (_LSin(_Left, 0));
        }

inline long double sinh(long double _Left)
        { // return hyperbolic sine
        return (_LSinh(_Left, 1));
        }

inline long double sqrt(long double _Left)
        { // return square root
        return (sqrtl(_Left));
        }

inline long double tan(long double _Left)
        { // return tangent
        return (tanl(_Left));
        }

inline long double tanh(long double _Left)
        { // return hyperbolic tangent
        return (tanhl(_Left));
        }

 #if _HAS_C9X
inline long double acosh(long double _Left)
        { // return acosh
        return (acoshl(_Left));
        }

inline long double asinh(long double _Left)
        { // return asinh
        return (asinhl(_Left));
        }

inline long double atanh(long double _Left)
        { // return atanh
        return (atanhl(_Left));
        }

inline long double cbrt(long double _Left)
        { // return cbrt
        return (cbrtl(_Left));
        }

inline long double copysign(long double _Left, long double _Right)
        { // return copysign
        return (copysignl(_Left, _Right));
        }

inline long double erf(long double _Left)
        { // return erf
        return (erfl(_Left));
        }

inline long double erfc(long double _Left)
        { // return erfc
        return (erfcl(_Left));
        }

inline long double exp2(long double _Left)
        { // return exp2
        return (exp2l(_Left));
        }

inline long double expm1(long double _Left)
        { // return expml
        return (expm1l(_Left));
        }

inline long double fdim(long double _Left, long double _Right)
        { // return fdim
        return (fdiml(_Left, _Right));
        }

inline long double fma(long double _Left, long double _Right,
        long double _Addend)
        { // return fma
        return (fmal(_Left, _Right, _Addend));
        }

inline long double fmax(long double _Left, long double _Right)
        { // return fmax
        return (fmaxl(_Left, _Right));
        }

inline long double fmin(long double _Left, long double _Right)
        { // return fmin
        return (fminl(_Left, _Right));
        }

inline long double hypot(long double _Left, long double _Right)
        { // return hypot
        return (hypotl(_Left, _Right));
        }

inline int ilogb(long double _Left)
        { // return ilogb
        return (ilogbl(_Left));
        }

inline long double lgamma(long double _Left)
        { // return lgamma
        return (lgammal(_Left));
        }

inline _Longlong llrint(long double _Left)
        { // return llrint
        return (llrintl(_Left));
        }

inline _Longlong llround(long double _Left)
        { // return llround
        return (llroundl(_Left));
        }

inline long double log1p(long double _Left)
        { // return loglp
        return (log1pl(_Left));
        }

inline long double log2(long double _Left)
        { // return log2
        return (_LLog(_Left, -1));
        }

inline long double logb(long double _Left)
        { // return logb
        return (logbl(_Left));
        }

inline long lrint(long double _Left)
        { // return lrint
        return (lrintl(_Left));
        }

inline long lround(long double _Left)
        { // return lround
        return (lroundl(_Left));
        }

inline long double nearbyint(long double _Left)
        { // return nearbyint
        return (nearbyintl(_Left));
        }

inline long double nextafter(long double _Left, long double _Right)
        { // return nextafter
        return (nextafterl(_Left, _Right));
        }

inline long double nexttoward(long double _Left, long double _Right)
        { // return nexttoward
        return (nexttowardl(_Left, _Right));
        }

inline long double remainder(long double _Left, long double _Right)
        { // return remainder
        return (remainderl(_Left, _Right));
        }

inline long double remquo(long double _Left, long double _Right,
        int *_Pval)
        { // return remquo
        return (remquol(_Left, _Right, _Pval));
        }

inline long double rint(long double _Left)
        { // return rint
        return (rintl(_Left));
        }

inline long double round(long double _Left)
        { // return round
        return (roundl(_Left));
        }

inline long double scalbn(long double _Left, int _Right)
        { // return scalbn
        return (scalbnl(_Left, _Right));
        }

inline long double scalbln(long double _Left, long _Right)
        { // return scalbln
        return (scalblnl(_Left, _Right));
        }

inline long double tgamma(long double _Left)
        { // return tgamma
        return (tgammal(_Left));
        }

inline long double trunc(long double _Left)
        { // return trunc
        return (truncl(_Left));
        }
 #endif /* _IS_C9X */

 #else /* defined(__cplusplus) && !defined(_NO_CPP_INLINES) */
_C_LIB_DECL
                /* double MACRO OVERRIDES, FOR C */
double cos(double);
double cosh(double);
double log(double);
double log10(double);
double sin(double);
double sinh(double);

 #define cos(x) _Sin(x, 1)
 #define cosh(x) _Cosh(x, 1)
 #define log(x) _Log(x, 0)
 #define log10(x) _Log(x, 1)
 #define sin(x) _Sin(x, 0)
 #define sinh(x) _Sinh(x, 1)

 #if _HAS_C9X
double log2(double);

 #define log2(x) _Log(x, -1)
 #endif /* _IS_C9X */

                /* float MACRO OVERRIDES, FOR C */
float cosf(float);
float coshf(float);
float logf(float);
float log10f(float);
float sinf(float);
float sinhf(float);

 #define cosf(x) _FSin(x, 1)
 #define coshf(x) _FCosh(x, 1)
 #define logf(x) _FLog(x, 0)
 #define log10f(x) _FLog(x, 1)
 #define sinf(x) _FSin(x, 0)
 #define sinhf(x) _FSinh(x, 1)

 #if _HAS_C9X
float log2f(float);

 #define log2f(x) _FLog(x, -1)
 #endif /* _IS_C9X */

                /* long double MACRO OVERRIDES, FOR C */
long double cosl(long double);
long double coshl(long double);
long double logl(long double);
long double log10l(long double);
long double sinl(long double);
long double sinhl(long double);

 #define cosl(x) _LSin(x, 1)
 #define coshl(x) _LCosh(x, 1)
 #define logl(x) _LLog(x, 0)
 #define log10l(x) _LLog(x, 1)
 #define sinl(x) _LSin(x, 0)
 #define sinhl(x) _LSinh(x, 1)

 #if _HAS_C9X
long double log2l(long double);

 #define log2l(x) _LLog(x, -1)
 #endif /* _IS_C9X */

_END_C_LIB_DECL
 #endif /* defined(__cplusplus) && !defined(_NO_CPP_INLINES) */

_C_STD_END
#endif /* _MATH */

 #if defined(_STD_USING)

using _CSTD acos; using _CSTD asin;
using _CSTD atan; using _CSTD atan2; using _CSTD ceil;
using _CSTD cos; using _CSTD cosh; using _CSTD exp;
using _CSTD fabs; using _CSTD floor; using _CSTD fmod;
using _CSTD frexp; using _CSTD ldexp; using _CSTD log;
using _CSTD log10; using _CSTD modf; using _CSTD pow;
using _CSTD sin; using _CSTD sinh; using _CSTD sqrt;
using _CSTD tan; using _CSTD tanh;

using _CSTD acosf; using _CSTD asinf;
using _CSTD atanf; using _CSTD atan2f; using _CSTD ceilf;
using _CSTD cosf; using _CSTD coshf; using _CSTD expf;
using _CSTD fabsf; using _CSTD floorf; using _CSTD fmodf;
using _CSTD frexpf; using _CSTD ldexpf; using _CSTD logf;
using _CSTD log10f; using _CSTD modff; using _CSTD powf;
using _CSTD sinf; using _CSTD sinhf; using _CSTD sqrtf;
using _CSTD tanf; using _CSTD tanhf;

using _CSTD acosl; using _CSTD asinl;
using _CSTD atanl; using _CSTD atan2l; using _CSTD ceill;
using _CSTD cosl; using _CSTD coshl; using _CSTD expl;
using _CSTD fabsl; using _CSTD floorl; using _CSTD fmodl;
using _CSTD frexpl; using _CSTD ldexpl; using _CSTD logl;
using _CSTD log10l; using _CSTD modfl; using _CSTD powl;
using _CSTD sinl; using _CSTD sinhl; using _CSTD sqrtl;
using _CSTD tanl; using _CSTD tanhl;

 #if _HAS_C9X

 #if _FPCOMP_template
using _CSTD _Rc_type; using _CSTD _Rc_widened;
using _CSTD _Real_type; using _CSTD _Real_widened;
using _CSTD _Combined_type;

using _CSTD _FPCOMP; using _CSTD fpclassify;
using _CSTD signbit; using _CSTD isfinite; using _CSTD isinf;
using _CSTD isnan; using _CSTD isnormal;
using _CSTD isgreater; using _CSTD isgreaterequal;
using _CSTD isless; using _CSTD islessequal; using _CSTD islessgreater;
using _CSTD isunordered;
 #endif /* _FPCOMP_template */

using _CSTD float_t; using _CSTD double_t;

using _CSTD acosh; using _CSTD asinh; using _CSTD atanh;
using _CSTD cbrt; using _CSTD erf; using _CSTD erfc;
using _CSTD expm1; using _CSTD exp2;
using _CSTD hypot; using _CSTD ilogb; using _CSTD lgamma;
using _CSTD log1p; using _CSTD log2; using _CSTD logb;
using _CSTD llrint; using _CSTD lrint; using _CSTD nearbyint;
using _CSTD rint; using _CSTD llround; using _CSTD lround;
using _CSTD fdim; using _CSTD fma; using _CSTD fmax; using _CSTD fmin;
using _CSTD round; using _CSTD trunc;
using _CSTD remainder; using _CSTD remquo;
using _CSTD copysign; using _CSTD nan; using _CSTD nextafter;
using _CSTD scalbn; using _CSTD scalbln;
using _CSTD nexttoward; using _CSTD tgamma;

using _CSTD acoshf; using _CSTD asinhf; using _CSTD atanhf;
using _CSTD cbrtf; using _CSTD erff; using _CSTD erfcf;
using _CSTD expm1f; using _CSTD exp2f;
using _CSTD hypotf; using _CSTD ilogbf; using _CSTD lgammaf;
using _CSTD log1pf; using _CSTD log2f; using _CSTD logbf;
using _CSTD llrintf; using _CSTD lrintf; using _CSTD nearbyintf;
using _CSTD rintf; using _CSTD llroundf; using _CSTD lroundf;
using _CSTD fdimf; using _CSTD fmaf; using _CSTD fmaxf; using _CSTD fminf;
using _CSTD roundf; using _CSTD truncf;
using _CSTD remainderf; using _CSTD remquof;
using _CSTD copysignf; using _CSTD nanf;
using _CSTD nextafterf; using _CSTD scalbnf; using _CSTD scalblnf;
using _CSTD nexttowardf; using _CSTD tgammaf;

using _CSTD acoshl; using _CSTD asinhl; using _CSTD atanhl;
using _CSTD cbrtl; using _CSTD erfl; using _CSTD erfcl;
using _CSTD expm1l; using _CSTD exp2l;
using _CSTD hypotl; using _CSTD ilogbl; using _CSTD lgammal;
using _CSTD log1pl; using _CSTD log2l; using _CSTD logbl;
using _CSTD llrintl; using _CSTD lrintl; using _CSTD nearbyintl;
using _CSTD rintl; using _CSTD llroundl; using _CSTD lroundl;
using _CSTD fdiml; using _CSTD fmal; using _CSTD fmaxl; using _CSTD fminl;
using _CSTD roundl; using _CSTD truncl;
using _CSTD remainderl; using _CSTD remquol;
using _CSTD copysignl; using _CSTD nanl;
using _CSTD nextafterl; using _CSTD scalbnl; using _CSTD scalblnl;
using _CSTD nexttowardl; using _CSTD tgammal;
 #endif /* _IS_C9X */

 #endif /* defined(_STD_USING) */

/*
 * Copyright (c) 1992-2003 by P.J. Plauger. ALL RIGHTS RESERVED.
 * Consult your license regarding permissions and restrictions.
V4.02:1296 */


/* ymath.h internal header */
#ifndef _YMATH
#define _YMATH
#include <yvals.h>
_C_STD_BEGIN
_C_LIB_DECL

                /* MACROS FOR _FPP_TYPE */
#define _FPP_NONE 0 /* software emulation of FPP */
#define _FPP_X86 1 /* Intel Pentium */
#define _FPP_SPARC 2 /* Sun SPARC */
#define _FPP_MIPS 3 /* SGI MIPS */
#define _FPP_S390 4 /* IBM S/390 */
#define _FPP_PPC 5 /* Motorola PowerPC */
#define _FPP_HPPA 6 /* Hewlett-Packard PA-RISC */
#define _FPP_ALPHA 7 /* Compaq Alpha */
#define _FPP_ARM 8 /* ARM ARM */
#define _FPP_M68K 9 /* Motorola 68xxx */
#define _FPP_SH4 10 /* Hitachi SH4 */
#define _FPP_IA64 11 /* Intel IA64 */
#define _FPP_WCE 12 /* EDG Windows CE */

                /* MACROS FOR _Dtest RETURN (0 => ZERO) */
#define _DENORM (-2) /* C9X only */
#define _FINITE (-1)
#define _INFCODE 1
#define _NANCODE 2

                /* MACROS FOR _Feraise ARGUMENT */

 #if _FPP_TYPE == _FPP_X86
  #define _FE_DIVBYZERO 0x04
  #define _FE_INEXACT 0x20
  #define _FE_INVALID 0x01
  #define _FE_OVERFLOW 0x08
  #define _FE_UNDERFLOW 0x10

 #elif _FPP_TYPE == _FPP_SPARC
  #define _FE_DIVBYZERO 0x02
  #define _FE_INEXACT 0x01
  #define _FE_INVALID 0x10
  #define _FE_OVERFLOW 0x08
  #define _FE_UNDERFLOW 0x04

 #elif _FPP_TYPE == _FPP_MIPS
  #define _FE_DIVBYZERO 0x02
  #define _FE_INEXACT 0x01
  #define _FE_INVALID 0x10
  #define _FE_OVERFLOW 0x08
  #define _FE_UNDERFLOW 0x04

 #elif _FPP_TYPE == _FPP_S390
  #define _FE_DIVBYZERO 0x08
  #define _FE_INEXACT 0x01
  #define _FE_INVALID 0x10
  #define _FE_OVERFLOW 0x04
  #define _FE_UNDERFLOW 0x02

 #elif _FPP_TYPE == _FPP_PPC
  #define _FE_DIVBYZERO 0x02
  #define _FE_INEXACT 0x01
  #define _FE_INVALID 0x10
  #define _FE_OVERFLOW 0x08
  #define _FE_UNDERFLOW 0x04

 #elif _FPP_TYPE == _FPP_HPPA
  #define _FE_DIVBYZERO 0x08
  #define _FE_INEXACT 0x01
  #define _FE_INVALID 0x10
  #define _FE_OVERFLOW 0x04
  #define _FE_UNDERFLOW 0x02

 #elif _FPP_TYPE == _FPP_ALPHA
  #define _FE_DIVBYZERO 0x02
  #define _FE_INEXACT 0x10
  #define _FE_INVALID 0x01
  #define _FE_OVERFLOW 0x04
  #define _FE_UNDERFLOW 0x08

 #elif _FPP_TYPE == _FPP_ARM
  #define _FE_DIVBYZERO 0x02
  #define _FE_INEXACT 0x10
  #define _FE_INVALID 0x01
  #define _FE_OVERFLOW 0x04
  #define _FE_UNDERFLOW 0x08

 #elif _FPP_TYPE == _FPP_M68K
  #define _FE_DIVBYZERO 0x02
  #define _FE_INEXACT 0x01
  #define _FE_INVALID 0x10
  #define _FE_OVERFLOW 0x08
  #define _FE_UNDERFLOW 0x04

 #elif _FPP_TYPE == _FPP_SH4
  #define _FE_DIVBYZERO 0x08
  #define _FE_INEXACT 0x01
  #define _FE_INVALID 0x10
  #define _FE_OVERFLOW 0x04
  #define _FE_UNDERFLOW 0x02

 #elif _FPP_TYPE == _FPP_IA64
  #define _FE_DIVBYZERO 0x04
  #define _FE_INEXACT 0x20
  #define _FE_INVALID 0x01
  #define _FE_OVERFLOW 0x08
  #define _FE_UNDERFLOW 0x10

 #elif _FPP_TYPE == _FPP_WCE
  #define _FE_DIVBYZERO 0x08
  #define _FE_INEXACT 0x01
  #define _FE_INVALID 0x10
  #define _FE_OVERFLOW 0x04
  #define _FE_UNDERFLOW 0x02

 #else /* _FPP_TYPE == _FPP_NONE or unknown */
  #undef _FPP_TYPE
  #define _FPP_TYPE _FPP_NONE

  #define _FE_DIVBYZERO 0x04 /* dummy same as Pentium */
  #define _FE_INEXACT 0x20
  #define _FE_INVALID 0x01
  #define _FE_OVERFLOW 0x08
  #define _FE_UNDERFLOW 0x10
 #endif /* _FPP_TYPE */

                /* TYPE DEFINITIONS */
typedef union
        { /* pun float types as integer array */
        unsigned short _Word[8];
        float _Float;
        double _Double;
        long double _Long_double;
        } _Dconst;

                /* ERROR REPORTING */
void _Feraise(int);

                /* double DECLARATIONS */
double _Cosh(double, double);
short _Dtest(double *);
short _Exp(double *, double, short);
double _Log(double, int);
double _Sin(double, unsigned int);
double _Sinh(double, double);
#ifdef _FLOAT_DATA_IS_CONST
extern const _Dconst _Denorm, _Hugeval, _Inf,
        _Nan, _Snan;
#else
extern /* const */ _Dconst _Denorm, _Hugeval, _Inf,
        _Nan, _Snan;
#endif

                /* float DECLARATIONS */
float _FCosh(float, float);
short _FDtest(float *);
short _FExp(float *, float, short);
float _FLog(float, int);
float _FSin(float, unsigned int);
float _FSinh(float, float);
#ifdef _FLOAT_DATA_IS_CONST
extern const _Dconst _FDenorm, _FInf, _FNan, _FSnan;
#else
extern /* const */ _Dconst _FDenorm, _FInf, _FNan, _FSnan;
#endif

                /* long double DECLARATIONS */
long double _LCosh(long double, long double);
short _LDtest(long double *);
short _LExp(long double *, long double, short);
long double _LLog(long double, int);
long double _LSin(long double, unsigned int);
long double _LSinh(long double, long double);
#ifdef _FLOAT_DATA_IS_CONST
extern const _Dconst _LDenorm, _LInf, _LNan, _LSnan;
#else
extern /* const */ _Dconst _LDenorm, _LInf, _LNan, _LSnan;
#endif

 #if defined(__SUNPRO_CC) /* compiler test */
float fmodf(float, float);
long double fmodl(long double, long double);
 #endif /* defined(__SUNPRO_CC) */

 #if defined(__BORLANDC__) /* compiler test */
float fmodf(float, float);
float logf(float);
 #endif /* defined(__BORLANDC__) */

_END_C_LIB_DECL
_C_STD_END
#endif /* _YMATH */

/*
 * Copyright (c) 1992-2003 by P.J. Plauger. ALL RIGHTS RESERVED.
 * Consult your license regarding permissions and restrictions.
V4.02:1296 */


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk