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