1*53ee8cc1Swenshuai.xi /* DO NOT EDIT THIS FILE. 2*53ee8cc1Swenshuai.xi 3*53ee8cc1Swenshuai.xi It has been auto-edited by fixincludes from: 4*53ee8cc1Swenshuai.xi 5*53ee8cc1Swenshuai.xi "/scratch/clm/2008q3-sde-lite/install/mips-sde-elf/usr/include/math.h" 6*53ee8cc1Swenshuai.xi 7*53ee8cc1Swenshuai.xi This had to be done to correct non-standard usages in the 8*53ee8cc1Swenshuai.xi original, manufacturer supplied header file. */ 9*53ee8cc1Swenshuai.xi 10*53ee8cc1Swenshuai.xi #ifndef _MATH_H_ 11*53ee8cc1Swenshuai.xi 12*53ee8cc1Swenshuai.xi #define _MATH_H_ 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi /* Indicate that we honor AEABI portability if requested. */ 15*53ee8cc1Swenshuai.xi #if defined _AEABI_PORTABILITY_LEVEL && _AEABI_PORTABILITY_LEVEL != 0 && !defined _AEABI_PORTABLE 16*53ee8cc1Swenshuai.xi # define _AEABI_PORTABLE 17*53ee8cc1Swenshuai.xi #endif 18*53ee8cc1Swenshuai.xi 19*53ee8cc1Swenshuai.xi #include <sys/reent.h> 20*53ee8cc1Swenshuai.xi #include <machine/ieeefp.h> 21*53ee8cc1Swenshuai.xi #include "_ansi.h" 22*53ee8cc1Swenshuai.xi 23*53ee8cc1Swenshuai.xi _BEGIN_STD_C 24*53ee8cc1Swenshuai.xi 25*53ee8cc1Swenshuai.xi union __dmath 26*53ee8cc1Swenshuai.xi { 27*53ee8cc1Swenshuai.xi __ULong i[2]; 28*53ee8cc1Swenshuai.xi double d; 29*53ee8cc1Swenshuai.xi }; 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi union __fmath 32*53ee8cc1Swenshuai.xi { 33*53ee8cc1Swenshuai.xi __ULong i[1]; 34*53ee8cc1Swenshuai.xi float f; 35*53ee8cc1Swenshuai.xi }; 36*53ee8cc1Swenshuai.xi 37*53ee8cc1Swenshuai.xi union __ldmath 38*53ee8cc1Swenshuai.xi { 39*53ee8cc1Swenshuai.xi __ULong i[4]; 40*53ee8cc1Swenshuai.xi _LONG_DOUBLE ld; 41*53ee8cc1Swenshuai.xi }; 42*53ee8cc1Swenshuai.xi 43*53ee8cc1Swenshuai.xi /* Natural log of 2 */ 44*53ee8cc1Swenshuai.xi #define _M_LOG2_E 0.693147180559945309417 45*53ee8cc1Swenshuai.xi 46*53ee8cc1Swenshuai.xi #if defined(__GNUC__) && \ 47*53ee8cc1Swenshuai.xi ( (__GNUC__ >= 4) || \ 48*53ee8cc1Swenshuai.xi ( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 3) ) ) 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xi /* gcc >= 3.3 implicitly defines builtins for HUGE_VALx values. */ 51*53ee8cc1Swenshuai.xi 52*53ee8cc1Swenshuai.xi # ifndef HUGE_VAL 53*53ee8cc1Swenshuai.xi # define HUGE_VAL (__builtin_huge_val()) 54*53ee8cc1Swenshuai.xi # endif 55*53ee8cc1Swenshuai.xi 56*53ee8cc1Swenshuai.xi # ifndef HUGE_VALF 57*53ee8cc1Swenshuai.xi # define HUGE_VALF (__builtin_huge_valf()) 58*53ee8cc1Swenshuai.xi # endif 59*53ee8cc1Swenshuai.xi 60*53ee8cc1Swenshuai.xi # ifndef HUGE_VALL 61*53ee8cc1Swenshuai.xi # define HUGE_VALL (__builtin_huge_vall()) 62*53ee8cc1Swenshuai.xi # endif 63*53ee8cc1Swenshuai.xi 64*53ee8cc1Swenshuai.xi # ifndef INFINITY 65*53ee8cc1Swenshuai.xi # define INFINITY (__builtin_inff()) 66*53ee8cc1Swenshuai.xi # endif 67*53ee8cc1Swenshuai.xi 68*53ee8cc1Swenshuai.xi # ifndef NAN 69*53ee8cc1Swenshuai.xi # define NAN (__builtin_nanf("")) 70*53ee8cc1Swenshuai.xi # endif 71*53ee8cc1Swenshuai.xi 72*53ee8cc1Swenshuai.xi #else /* !gcc >= 3.3 */ 73*53ee8cc1Swenshuai.xi 74*53ee8cc1Swenshuai.xi /* No builtins. Use floating-point unions instead. Declare as an array 75*53ee8cc1Swenshuai.xi without bounds so no matter what small data support a port and/or 76*53ee8cc1Swenshuai.xi library has, the reference will be via the general method for accessing 77*53ee8cc1Swenshuai.xi globals. */ 78*53ee8cc1Swenshuai.xi 79*53ee8cc1Swenshuai.xi #ifndef HUGE_VAL 80*53ee8cc1Swenshuai.xi extern __IMPORT const union __dmath __infinity[]; 81*53ee8cc1Swenshuai.xi #define HUGE_VAL (__infinity[0].d) 82*53ee8cc1Swenshuai.xi #endif 83*53ee8cc1Swenshuai.xi 84*53ee8cc1Swenshuai.xi #ifndef HUGE_VALF 85*53ee8cc1Swenshuai.xi extern __IMPORT const union __fmath __infinityf[]; 86*53ee8cc1Swenshuai.xi #define HUGE_VALF (__infinityf[0].f) 87*53ee8cc1Swenshuai.xi #endif 88*53ee8cc1Swenshuai.xi 89*53ee8cc1Swenshuai.xi #ifndef HUGE_VALL 90*53ee8cc1Swenshuai.xi extern __IMPORT const union __ldmath __infinityld[]; 91*53ee8cc1Swenshuai.xi #define HUGE_VALL (__infinityld[0].ld) 92*53ee8cc1Swenshuai.xi #endif 93*53ee8cc1Swenshuai.xi 94*53ee8cc1Swenshuai.xi #endif /* !gcc >= 3.3 */ 95*53ee8cc1Swenshuai.xi 96*53ee8cc1Swenshuai.xi /* Reentrant ANSI C functions. */ 97*53ee8cc1Swenshuai.xi 98*53ee8cc1Swenshuai.xi #ifndef __math_68881 99*53ee8cc1Swenshuai.xi extern double atan _PARAMS((double)); 100*53ee8cc1Swenshuai.xi extern double cos _PARAMS((double)); 101*53ee8cc1Swenshuai.xi extern double sin _PARAMS((double)); 102*53ee8cc1Swenshuai.xi extern double tan _PARAMS((double)); 103*53ee8cc1Swenshuai.xi extern double tanh _PARAMS((double)); 104*53ee8cc1Swenshuai.xi extern double frexp _PARAMS((double, int *)); 105*53ee8cc1Swenshuai.xi extern double modf _PARAMS((double, double *)); 106*53ee8cc1Swenshuai.xi extern double ceil _PARAMS((double)); 107*53ee8cc1Swenshuai.xi extern double fabs _PARAMS((double)); 108*53ee8cc1Swenshuai.xi extern double floor _PARAMS((double)); 109*53ee8cc1Swenshuai.xi #endif /* ! defined (__math_68881) */ 110*53ee8cc1Swenshuai.xi 111*53ee8cc1Swenshuai.xi /* Non reentrant ANSI C functions. */ 112*53ee8cc1Swenshuai.xi 113*53ee8cc1Swenshuai.xi #ifndef _REENT_ONLY 114*53ee8cc1Swenshuai.xi #ifndef __math_6881 115*53ee8cc1Swenshuai.xi extern double acos _PARAMS((double)); 116*53ee8cc1Swenshuai.xi extern double asin _PARAMS((double)); 117*53ee8cc1Swenshuai.xi extern double atan2 _PARAMS((double, double)); 118*53ee8cc1Swenshuai.xi extern double cosh _PARAMS((double)); 119*53ee8cc1Swenshuai.xi extern double sinh _PARAMS((double)); 120*53ee8cc1Swenshuai.xi extern double exp _PARAMS((double)); 121*53ee8cc1Swenshuai.xi extern double ldexp _PARAMS((double, int)); 122*53ee8cc1Swenshuai.xi extern double log _PARAMS((double)); 123*53ee8cc1Swenshuai.xi extern double log10 _PARAMS((double)); 124*53ee8cc1Swenshuai.xi extern double pow _PARAMS((double, double)); 125*53ee8cc1Swenshuai.xi extern double sqrt _PARAMS((double)); 126*53ee8cc1Swenshuai.xi extern double fmod _PARAMS((double, double)); 127*53ee8cc1Swenshuai.xi #endif /* ! defined (__math_68881) */ 128*53ee8cc1Swenshuai.xi #endif /* ! defined (_REENT_ONLY) */ 129*53ee8cc1Swenshuai.xi 130*53ee8cc1Swenshuai.xi #if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L 131*53ee8cc1Swenshuai.xi 132*53ee8cc1Swenshuai.xi /* ISO C99 types and macros. */ 133*53ee8cc1Swenshuai.xi 134*53ee8cc1Swenshuai.xi #ifndef FLT_EVAL_METHOD 135*53ee8cc1Swenshuai.xi #define FLT_EVAL_METHOD 0 136*53ee8cc1Swenshuai.xi typedef float float_t; 137*53ee8cc1Swenshuai.xi typedef double double_t; 138*53ee8cc1Swenshuai.xi #endif /* FLT_EVAL_METHOD */ 139*53ee8cc1Swenshuai.xi 140*53ee8cc1Swenshuai.xi #define FP_NAN 0 141*53ee8cc1Swenshuai.xi #define FP_INFINITE 1 142*53ee8cc1Swenshuai.xi #define FP_ZERO 2 143*53ee8cc1Swenshuai.xi #define FP_SUBNORMAL 3 144*53ee8cc1Swenshuai.xi #define FP_NORMAL 4 145*53ee8cc1Swenshuai.xi 146*53ee8cc1Swenshuai.xi #ifndef FP_ILOGB0 147*53ee8cc1Swenshuai.xi # define FP_ILOGB0 (-INT_MAX) 148*53ee8cc1Swenshuai.xi #endif 149*53ee8cc1Swenshuai.xi #ifndef FP_ILOGBNAN 150*53ee8cc1Swenshuai.xi # define FP_ILOGBNAN INT_MAX 151*53ee8cc1Swenshuai.xi #endif 152*53ee8cc1Swenshuai.xi 153*53ee8cc1Swenshuai.xi #ifndef MATH_ERRNO 154*53ee8cc1Swenshuai.xi # define MATH_ERRNO 1 155*53ee8cc1Swenshuai.xi #endif 156*53ee8cc1Swenshuai.xi #ifndef MATH_ERREXCEPT 157*53ee8cc1Swenshuai.xi # define MATH_ERREXCEPT 2 158*53ee8cc1Swenshuai.xi #endif 159*53ee8cc1Swenshuai.xi #ifndef math_errhandling 160*53ee8cc1Swenshuai.xi # define math_errhandling MATH_ERRNO 161*53ee8cc1Swenshuai.xi #endif 162*53ee8cc1Swenshuai.xi 163*53ee8cc1Swenshuai.xi extern int __isinff (float x); 164*53ee8cc1Swenshuai.xi extern int __isinfd (double x); 165*53ee8cc1Swenshuai.xi extern int __isnanf (float x); 166*53ee8cc1Swenshuai.xi extern int __isnand (double x); 167*53ee8cc1Swenshuai.xi extern int __fpclassifyf (float x); 168*53ee8cc1Swenshuai.xi extern int __fpclassifyd (double x); 169*53ee8cc1Swenshuai.xi extern int __signbitf (float x); 170*53ee8cc1Swenshuai.xi extern int __signbitd (double x); 171*53ee8cc1Swenshuai.xi 172*53ee8cc1Swenshuai.xi #define fpclassify(x) \ 173*53ee8cc1Swenshuai.xi (__extension__ ({__typeof__(x) __x = (x); \ 174*53ee8cc1Swenshuai.xi (sizeof (__x) == sizeof (float)) ? __fpclassifyf(__x) : __fpclassifyd(__x);})) 175*53ee8cc1Swenshuai.xi 176*53ee8cc1Swenshuai.xi #ifndef isfinite 177*53ee8cc1Swenshuai.xi #define isfinite(y) \ 178*53ee8cc1Swenshuai.xi (__extension__ ({__typeof__(y) __y = (y); \ 179*53ee8cc1Swenshuai.xi fpclassify(__y) != FP_INFINITE && fpclassify(__y) != FP_NAN;})) 180*53ee8cc1Swenshuai.xi #endif 181*53ee8cc1Swenshuai.xi 182*53ee8cc1Swenshuai.xi /* Note: isinf and isnan were once functions in newlib that took double 183*53ee8cc1Swenshuai.xi * arguments. C99 specifies that these names are reserved for macros 184*53ee8cc1Swenshuai.xi * supporting multiple floating point types. Thus, they are 185*53ee8cc1Swenshuai.xi * now defined as macros. Implementations of the old functions 186*53ee8cc1Swenshuai.xi * taking double arguments still exist for compatibility purposes. */ 187*53ee8cc1Swenshuai.xi #ifndef isinf 188*53ee8cc1Swenshuai.xi #define isinf(x) \ 189*53ee8cc1Swenshuai.xi (__extension__ ({__typeof__(x) __x = (x); \ 190*53ee8cc1Swenshuai.xi (sizeof (__x) == sizeof (float)) ? __isinff(__x) : __isinfd(__x);})) 191*53ee8cc1Swenshuai.xi #endif 192*53ee8cc1Swenshuai.xi 193*53ee8cc1Swenshuai.xi #ifndef isnan 194*53ee8cc1Swenshuai.xi #define isnan(x) \ 195*53ee8cc1Swenshuai.xi (__extension__ ({__typeof__(x) __x = (x); \ 196*53ee8cc1Swenshuai.xi (sizeof (__x) == sizeof (float)) ? __isnanf(__x) : __isnand(__x);})) 197*53ee8cc1Swenshuai.xi #endif 198*53ee8cc1Swenshuai.xi 199*53ee8cc1Swenshuai.xi #define isnormal(y) (fpclassify(y) == FP_NORMAL) 200*53ee8cc1Swenshuai.xi #define signbit(x) \ 201*53ee8cc1Swenshuai.xi (__extension__ ({__typeof__(x) __x = (x); \ 202*53ee8cc1Swenshuai.xi (sizeof(__x) == sizeof(float)) ? __signbitf(__x) : __signbitd(__x);})) 203*53ee8cc1Swenshuai.xi 204*53ee8cc1Swenshuai.xi #define isgreater(x,y) \ 205*53ee8cc1Swenshuai.xi (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ 206*53ee8cc1Swenshuai.xi !isunordered(__x,__y) && (__x > __y);})) 207*53ee8cc1Swenshuai.xi #define isgreaterequal(x,y) \ 208*53ee8cc1Swenshuai.xi (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ 209*53ee8cc1Swenshuai.xi !isunordered(__x,__y) && (__x >= __y);})) 210*53ee8cc1Swenshuai.xi #define isless(x,y) \ 211*53ee8cc1Swenshuai.xi (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ 212*53ee8cc1Swenshuai.xi !isunordered(__x,__y) && (__x < __y);})) 213*53ee8cc1Swenshuai.xi #define islessequal(x,y) \ 214*53ee8cc1Swenshuai.xi (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ 215*53ee8cc1Swenshuai.xi !isunordered(__x,__y) && (__x <= __y);})) 216*53ee8cc1Swenshuai.xi #define islessgreater(x,y) \ 217*53ee8cc1Swenshuai.xi (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ 218*53ee8cc1Swenshuai.xi !isunordered(__x,__y) && (__x < __y || __x > __y);})) 219*53ee8cc1Swenshuai.xi 220*53ee8cc1Swenshuai.xi #define isunordered(a,b) \ 221*53ee8cc1Swenshuai.xi (__extension__ ({__typeof__(a) __a = (a); __typeof__(b) __b = (b); \ 222*53ee8cc1Swenshuai.xi fpclassify(__a) == FP_NAN || fpclassify(__b) == FP_NAN;})) 223*53ee8cc1Swenshuai.xi 224*53ee8cc1Swenshuai.xi /* Non ANSI double precision functions. */ 225*53ee8cc1Swenshuai.xi 226*53ee8cc1Swenshuai.xi extern double infinity _PARAMS((void)); 227*53ee8cc1Swenshuai.xi extern double nan _PARAMS((const char *)); 228*53ee8cc1Swenshuai.xi extern int finite _PARAMS((double)); 229*53ee8cc1Swenshuai.xi extern double copysign _PARAMS((double, double)); 230*53ee8cc1Swenshuai.xi extern int ilogb _PARAMS((double)); 231*53ee8cc1Swenshuai.xi 232*53ee8cc1Swenshuai.xi extern double asinh _PARAMS((double)); 233*53ee8cc1Swenshuai.xi extern double cbrt _PARAMS((double)); 234*53ee8cc1Swenshuai.xi extern double nextafter _PARAMS((double, double)); 235*53ee8cc1Swenshuai.xi extern double rint _PARAMS((double)); 236*53ee8cc1Swenshuai.xi extern double scalbn _PARAMS((double, int)); 237*53ee8cc1Swenshuai.xi 238*53ee8cc1Swenshuai.xi extern double exp2 _PARAMS((double)); 239*53ee8cc1Swenshuai.xi extern double scalbln _PARAMS((double, long int)); 240*53ee8cc1Swenshuai.xi extern double tgamma _PARAMS((double)); 241*53ee8cc1Swenshuai.xi extern double nearbyint _PARAMS((double)); 242*53ee8cc1Swenshuai.xi extern long int lrint _PARAMS((double)); 243*53ee8cc1Swenshuai.xi extern _LONG_LONG int llrint _PARAMS((double)); 244*53ee8cc1Swenshuai.xi extern double round _PARAMS((double)); 245*53ee8cc1Swenshuai.xi extern long int lround _PARAMS((double)); 246*53ee8cc1Swenshuai.xi extern double trunc _PARAMS((double)); 247*53ee8cc1Swenshuai.xi extern double remquo _PARAMS((double, double, int *)); 248*53ee8cc1Swenshuai.xi extern double copysign _PARAMS((double, double)); 249*53ee8cc1Swenshuai.xi extern double fdim _PARAMS((double, double)); 250*53ee8cc1Swenshuai.xi extern double fmax _PARAMS((double, double)); 251*53ee8cc1Swenshuai.xi extern double fmin _PARAMS((double, double)); 252*53ee8cc1Swenshuai.xi extern double fma _PARAMS((double, double, double)); 253*53ee8cc1Swenshuai.xi 254*53ee8cc1Swenshuai.xi #ifndef __math_68881 255*53ee8cc1Swenshuai.xi extern double log1p _PARAMS((double)); 256*53ee8cc1Swenshuai.xi extern double expm1 _PARAMS((double)); 257*53ee8cc1Swenshuai.xi #endif /* ! defined (__math_68881) */ 258*53ee8cc1Swenshuai.xi 259*53ee8cc1Swenshuai.xi #ifndef _REENT_ONLY 260*53ee8cc1Swenshuai.xi extern double acosh _PARAMS((double)); 261*53ee8cc1Swenshuai.xi extern double atanh _PARAMS((double)); 262*53ee8cc1Swenshuai.xi extern double remainder _PARAMS((double, double)); 263*53ee8cc1Swenshuai.xi extern double gamma _PARAMS((double)); 264*53ee8cc1Swenshuai.xi extern double lgamma _PARAMS((double)); 265*53ee8cc1Swenshuai.xi extern double erf _PARAMS((double)); 266*53ee8cc1Swenshuai.xi extern double erfc _PARAMS((double)); 267*53ee8cc1Swenshuai.xi #define log2(x) (log (x) / _M_LOG2_E) 268*53ee8cc1Swenshuai.xi 269*53ee8cc1Swenshuai.xi #ifndef __math_68881 270*53ee8cc1Swenshuai.xi extern double hypot _PARAMS((double, double)); 271*53ee8cc1Swenshuai.xi #endif 272*53ee8cc1Swenshuai.xi 273*53ee8cc1Swenshuai.xi #endif /* ! defined (_REENT_ONLY) */ 274*53ee8cc1Swenshuai.xi 275*53ee8cc1Swenshuai.xi /* Single precision versions of ANSI functions. */ 276*53ee8cc1Swenshuai.xi 277*53ee8cc1Swenshuai.xi extern float atanf _PARAMS((float)); 278*53ee8cc1Swenshuai.xi extern float cosf _PARAMS((float)); 279*53ee8cc1Swenshuai.xi extern float sinf _PARAMS((float)); 280*53ee8cc1Swenshuai.xi extern float tanf _PARAMS((float)); 281*53ee8cc1Swenshuai.xi extern float tanhf _PARAMS((float)); 282*53ee8cc1Swenshuai.xi extern float frexpf _PARAMS((float, int *)); 283*53ee8cc1Swenshuai.xi extern float modff _PARAMS((float, float *)); 284*53ee8cc1Swenshuai.xi extern float ceilf _PARAMS((float)); 285*53ee8cc1Swenshuai.xi extern float fabsf _PARAMS((float)); 286*53ee8cc1Swenshuai.xi extern float floorf _PARAMS((float)); 287*53ee8cc1Swenshuai.xi 288*53ee8cc1Swenshuai.xi #ifndef _REENT_ONLY 289*53ee8cc1Swenshuai.xi extern float acosf _PARAMS((float)); 290*53ee8cc1Swenshuai.xi extern float asinf _PARAMS((float)); 291*53ee8cc1Swenshuai.xi extern float atan2f _PARAMS((float, float)); 292*53ee8cc1Swenshuai.xi extern float coshf _PARAMS((float)); 293*53ee8cc1Swenshuai.xi extern float sinhf _PARAMS((float)); 294*53ee8cc1Swenshuai.xi extern float expf _PARAMS((float)); 295*53ee8cc1Swenshuai.xi extern float ldexpf _PARAMS((float, int)); 296*53ee8cc1Swenshuai.xi extern float logf _PARAMS((float)); 297*53ee8cc1Swenshuai.xi extern float log10f _PARAMS((float)); 298*53ee8cc1Swenshuai.xi extern float powf _PARAMS((float, float)); 299*53ee8cc1Swenshuai.xi extern float sqrtf _PARAMS((float)); 300*53ee8cc1Swenshuai.xi extern float fmodf _PARAMS((float, float)); 301*53ee8cc1Swenshuai.xi #endif /* ! defined (_REENT_ONLY) */ 302*53ee8cc1Swenshuai.xi 303*53ee8cc1Swenshuai.xi /* Other single precision functions. */ 304*53ee8cc1Swenshuai.xi 305*53ee8cc1Swenshuai.xi extern float exp2f _PARAMS((float)); 306*53ee8cc1Swenshuai.xi extern float scalblnf _PARAMS((float, long int)); 307*53ee8cc1Swenshuai.xi extern float tgammaf _PARAMS((float)); 308*53ee8cc1Swenshuai.xi extern float nearbyintf _PARAMS((float)); 309*53ee8cc1Swenshuai.xi extern long int lrintf _PARAMS((float)); 310*53ee8cc1Swenshuai.xi extern _LONG_LONG llrintf _PARAMS((float)); 311*53ee8cc1Swenshuai.xi extern float roundf _PARAMS((float)); 312*53ee8cc1Swenshuai.xi extern long int lroundf _PARAMS((float)); 313*53ee8cc1Swenshuai.xi extern float truncf _PARAMS((float)); 314*53ee8cc1Swenshuai.xi extern float remquof _PARAMS((float, float, int *)); 315*53ee8cc1Swenshuai.xi extern float copysignf _PARAMS((float, float)); 316*53ee8cc1Swenshuai.xi extern float fdimf _PARAMS((float, float)); 317*53ee8cc1Swenshuai.xi extern float fmaxf _PARAMS((float, float)); 318*53ee8cc1Swenshuai.xi extern float fminf _PARAMS((float, float)); 319*53ee8cc1Swenshuai.xi extern float fmaf _PARAMS((float, float, float)); 320*53ee8cc1Swenshuai.xi 321*53ee8cc1Swenshuai.xi extern float infinityf _PARAMS((void)); 322*53ee8cc1Swenshuai.xi extern float nanf _PARAMS((const char *)); 323*53ee8cc1Swenshuai.xi extern int isnanf _PARAMS((float)); 324*53ee8cc1Swenshuai.xi extern int isinff _PARAMS((float)); 325*53ee8cc1Swenshuai.xi extern int finitef _PARAMS((float)); 326*53ee8cc1Swenshuai.xi extern float copysignf _PARAMS((float, float)); 327*53ee8cc1Swenshuai.xi extern int ilogbf _PARAMS((float)); 328*53ee8cc1Swenshuai.xi 329*53ee8cc1Swenshuai.xi extern float asinhf _PARAMS((float)); 330*53ee8cc1Swenshuai.xi extern float cbrtf _PARAMS((float)); 331*53ee8cc1Swenshuai.xi extern float nextafterf _PARAMS((float, float)); 332*53ee8cc1Swenshuai.xi extern float rintf _PARAMS((float)); 333*53ee8cc1Swenshuai.xi extern float scalbnf _PARAMS((float, int)); 334*53ee8cc1Swenshuai.xi extern float log1pf _PARAMS((float)); 335*53ee8cc1Swenshuai.xi extern float expm1f _PARAMS((float)); 336*53ee8cc1Swenshuai.xi 337*53ee8cc1Swenshuai.xi #ifndef _REENT_ONLY 338*53ee8cc1Swenshuai.xi extern float acoshf _PARAMS((float)); 339*53ee8cc1Swenshuai.xi extern float atanhf _PARAMS((float)); 340*53ee8cc1Swenshuai.xi extern float remainderf _PARAMS((float, float)); 341*53ee8cc1Swenshuai.xi extern float gammaf _PARAMS((float)); 342*53ee8cc1Swenshuai.xi extern float lgammaf _PARAMS((float)); 343*53ee8cc1Swenshuai.xi extern float erff _PARAMS((float)); 344*53ee8cc1Swenshuai.xi extern float erfcf _PARAMS((float)); 345*53ee8cc1Swenshuai.xi #define log2f(x) (logf (x) / (float) _M_LOG2_E) 346*53ee8cc1Swenshuai.xi extern float hypotf _PARAMS((float, float)); 347*53ee8cc1Swenshuai.xi #endif /* ! defined (_REENT_ONLY) */ 348*53ee8cc1Swenshuai.xi 349*53ee8cc1Swenshuai.xi /* Other long double precision functions. */ 350*53ee8cc1Swenshuai.xi extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE)); 351*53ee8cc1Swenshuai.xi extern long int lrintl _PARAMS((_LONG_DOUBLE)); 352*53ee8cc1Swenshuai.xi extern _LONG_LONG llrintl _PARAMS((_LONG_DOUBLE)); 353*53ee8cc1Swenshuai.xi 354*53ee8cc1Swenshuai.xi #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L */ 355*53ee8cc1Swenshuai.xi 356*53ee8cc1Swenshuai.xi #if !defined (__STRICT_ANSI__) || defined(__cplusplus) 357*53ee8cc1Swenshuai.xi 358*53ee8cc1Swenshuai.xi 359*53ee8cc1Swenshuai.xi extern double drem _PARAMS((double, double)); 360*53ee8cc1Swenshuai.xi extern void sincos _PARAMS((double, double *, double *)); 361*53ee8cc1Swenshuai.xi extern double gamma_r _PARAMS((double, int *)); 362*53ee8cc1Swenshuai.xi extern double lgamma_r _PARAMS((double, int *)); 363*53ee8cc1Swenshuai.xi 364*53ee8cc1Swenshuai.xi extern double y0 _PARAMS((double)); 365*53ee8cc1Swenshuai.xi extern double y1 _PARAMS((double)); 366*53ee8cc1Swenshuai.xi extern double yn _PARAMS((int, double)); 367*53ee8cc1Swenshuai.xi extern double j0 _PARAMS((double)); 368*53ee8cc1Swenshuai.xi extern double j1 _PARAMS((double)); 369*53ee8cc1Swenshuai.xi extern double jn _PARAMS((int, double)); 370*53ee8cc1Swenshuai.xi 371*53ee8cc1Swenshuai.xi extern float cabsf(); 372*53ee8cc1Swenshuai.xi extern float dremf _PARAMS((float, float)); 373*53ee8cc1Swenshuai.xi extern void sincosf _PARAMS((float, float *, float *)); 374*53ee8cc1Swenshuai.xi extern float gammaf_r _PARAMS((float, int *)); 375*53ee8cc1Swenshuai.xi extern float lgammaf_r _PARAMS((float, int *)); 376*53ee8cc1Swenshuai.xi 377*53ee8cc1Swenshuai.xi extern float y0f _PARAMS((float)); 378*53ee8cc1Swenshuai.xi extern float y1f _PARAMS((float)); 379*53ee8cc1Swenshuai.xi extern float ynf _PARAMS((int, float)); 380*53ee8cc1Swenshuai.xi extern float j0f _PARAMS((float)); 381*53ee8cc1Swenshuai.xi extern float j1f _PARAMS((float)); 382*53ee8cc1Swenshuai.xi extern float jnf _PARAMS((int, float)); 383*53ee8cc1Swenshuai.xi 384*53ee8cc1Swenshuai.xi /* GNU extensions */ 385*53ee8cc1Swenshuai.xi # ifndef exp10 386*53ee8cc1Swenshuai.xi extern double exp10 _PARAMS((double)); 387*53ee8cc1Swenshuai.xi # endif 388*53ee8cc1Swenshuai.xi # ifndef pow10 389*53ee8cc1Swenshuai.xi extern double pow10 _PARAMS((double)); 390*53ee8cc1Swenshuai.xi # endif 391*53ee8cc1Swenshuai.xi # ifndef exp10f 392*53ee8cc1Swenshuai.xi extern float exp10f _PARAMS((float)); 393*53ee8cc1Swenshuai.xi # endif 394*53ee8cc1Swenshuai.xi # ifndef pow10f 395*53ee8cc1Swenshuai.xi extern float pow10f _PARAMS((float)); 396*53ee8cc1Swenshuai.xi # endif 397*53ee8cc1Swenshuai.xi 398*53ee8cc1Swenshuai.xi #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) */ 399*53ee8cc1Swenshuai.xi 400*53ee8cc1Swenshuai.xi #ifndef __STRICT_ANSI__ 401*53ee8cc1Swenshuai.xi 402*53ee8cc1Swenshuai.xi /* The gamma functions use a global variable, signgam. */ 403*53ee8cc1Swenshuai.xi #ifndef _REENT_ONLY 404*53ee8cc1Swenshuai.xi #define signgam (*__signgam()) 405*53ee8cc1Swenshuai.xi extern int *__signgam _PARAMS((void)); 406*53ee8cc1Swenshuai.xi #endif /* ! defined (_REENT_ONLY) */ 407*53ee8cc1Swenshuai.xi 408*53ee8cc1Swenshuai.xi #define __signgam_r(ptr) _REENT_SIGNGAM(ptr) 409*53ee8cc1Swenshuai.xi 410*53ee8cc1Swenshuai.xi /* The exception structure passed to the matherr routine. */ 411*53ee8cc1Swenshuai.xi /* We have a problem when using C++ since `exception' is a reserved 412*53ee8cc1Swenshuai.xi name in C++. */ 413*53ee8cc1Swenshuai.xi #ifdef __cplusplus 414*53ee8cc1Swenshuai.xi struct __exception 415*53ee8cc1Swenshuai.xi #else 416*53ee8cc1Swenshuai.xi struct exception 417*53ee8cc1Swenshuai.xi #endif 418*53ee8cc1Swenshuai.xi { 419*53ee8cc1Swenshuai.xi int type; 420*53ee8cc1Swenshuai.xi char *name; 421*53ee8cc1Swenshuai.xi double arg1; 422*53ee8cc1Swenshuai.xi double arg2; 423*53ee8cc1Swenshuai.xi double retval; 424*53ee8cc1Swenshuai.xi int err; 425*53ee8cc1Swenshuai.xi }; 426*53ee8cc1Swenshuai.xi 427*53ee8cc1Swenshuai.xi #ifdef __cplusplus 428*53ee8cc1Swenshuai.xi extern int matherr _PARAMS((struct __exception *e)); 429*53ee8cc1Swenshuai.xi #else 430*53ee8cc1Swenshuai.xi extern int matherr _PARAMS((struct exception *e)); 431*53ee8cc1Swenshuai.xi #endif 432*53ee8cc1Swenshuai.xi 433*53ee8cc1Swenshuai.xi /* Values for the type field of struct exception. */ 434*53ee8cc1Swenshuai.xi 435*53ee8cc1Swenshuai.xi #define DOMAIN 1 436*53ee8cc1Swenshuai.xi #define SING 2 437*53ee8cc1Swenshuai.xi #define OVERFLOW 3 438*53ee8cc1Swenshuai.xi #define UNDERFLOW 4 439*53ee8cc1Swenshuai.xi #define TLOSS 5 440*53ee8cc1Swenshuai.xi #define PLOSS 6 441*53ee8cc1Swenshuai.xi 442*53ee8cc1Swenshuai.xi /* Useful constants. */ 443*53ee8cc1Swenshuai.xi 444*53ee8cc1Swenshuai.xi #define MAXFLOAT 3.40282347e+38F 445*53ee8cc1Swenshuai.xi 446*53ee8cc1Swenshuai.xi #define M_E 2.7182818284590452354 447*53ee8cc1Swenshuai.xi #define M_LOG2E 1.4426950408889634074 448*53ee8cc1Swenshuai.xi #define M_LOG10E 0.43429448190325182765 449*53ee8cc1Swenshuai.xi #define M_LN2 0.69314718055994530942 450*53ee8cc1Swenshuai.xi #define M_LN10 2.30258509299404568402 451*53ee8cc1Swenshuai.xi #define M_PI 3.14159265358979323846 452*53ee8cc1Swenshuai.xi #define M_TWOPI (M_PI * 2.0) 453*53ee8cc1Swenshuai.xi #define M_PI_2 1.57079632679489661923 454*53ee8cc1Swenshuai.xi #define M_PI_4 0.78539816339744830962 455*53ee8cc1Swenshuai.xi #define M_3PI_4 2.3561944901923448370E0 456*53ee8cc1Swenshuai.xi #define M_SQRTPI 1.77245385090551602792981 457*53ee8cc1Swenshuai.xi #define M_1_PI 0.31830988618379067154 458*53ee8cc1Swenshuai.xi #define M_2_PI 0.63661977236758134308 459*53ee8cc1Swenshuai.xi #define M_2_SQRTPI 1.12837916709551257390 460*53ee8cc1Swenshuai.xi #define M_SQRT2 1.41421356237309504880 461*53ee8cc1Swenshuai.xi #define M_SQRT1_2 0.70710678118654752440 462*53ee8cc1Swenshuai.xi #define M_LN2LO 1.9082149292705877000E-10 463*53ee8cc1Swenshuai.xi #define M_LN2HI 6.9314718036912381649E-1 464*53ee8cc1Swenshuai.xi #define M_SQRT3 1.73205080756887719000 465*53ee8cc1Swenshuai.xi #define M_IVLN10 0.43429448190325182765 /* 1 / log(10) */ 466*53ee8cc1Swenshuai.xi #define M_LOG2_E _M_LOG2_E 467*53ee8cc1Swenshuai.xi #define M_INVLN2 1.4426950408889633870E0 /* 1 / log(2) */ 468*53ee8cc1Swenshuai.xi 469*53ee8cc1Swenshuai.xi /* Global control over fdlibm error handling. */ 470*53ee8cc1Swenshuai.xi 471*53ee8cc1Swenshuai.xi enum __fdlibm_version 472*53ee8cc1Swenshuai.xi { 473*53ee8cc1Swenshuai.xi __fdlibm_ieee = -1, 474*53ee8cc1Swenshuai.xi __fdlibm_svid, 475*53ee8cc1Swenshuai.xi __fdlibm_xopen, 476*53ee8cc1Swenshuai.xi __fdlibm_posix 477*53ee8cc1Swenshuai.xi }; 478*53ee8cc1Swenshuai.xi 479*53ee8cc1Swenshuai.xi #define _LIB_VERSION_TYPE enum __fdlibm_version 480*53ee8cc1Swenshuai.xi #define _LIB_VERSION __fdlib_version 481*53ee8cc1Swenshuai.xi 482*53ee8cc1Swenshuai.xi extern __IMPORT _LIB_VERSION_TYPE _LIB_VERSION; 483*53ee8cc1Swenshuai.xi 484*53ee8cc1Swenshuai.xi #define _IEEE_ __fdlibm_ieee 485*53ee8cc1Swenshuai.xi #define _SVID_ __fdlibm_svid 486*53ee8cc1Swenshuai.xi #define _XOPEN_ __fdlibm_xopen 487*53ee8cc1Swenshuai.xi #define _POSIX_ __fdlibm_posix 488*53ee8cc1Swenshuai.xi 489*53ee8cc1Swenshuai.xi #endif /* ! defined (__STRICT_ANSI__) */ 490*53ee8cc1Swenshuai.xi 491*53ee8cc1Swenshuai.xi _END_STD_C 492*53ee8cc1Swenshuai.xi 493*53ee8cc1Swenshuai.xi #ifdef __FAST_MATH__ 494*53ee8cc1Swenshuai.xi #include <machine/fastmath.h> 495*53ee8cc1Swenshuai.xi #endif 496*53ee8cc1Swenshuai.xi 497*53ee8cc1Swenshuai.xi #endif /* _MATH_H_ */ 498