1 /* math.h -- Definitions for the math floating point package. */ 2 3 #ifndef _MATH_H_ 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 #define _MATH_H_ 8 9 #include <sys/reent.h> 10 #include <machine/ieeefp.h> 11 #include "_ansi.h" 12 13 #ifndef HUGE_VAL 14 15 /* Define HUGE_VAL as infinity, unless HUGE_VAL is already defined 16 (which might have been done by something like math-68881.h). */ 17 18 union __dmath 19 { 20 __uint32_t i[2]; 21 double d; 22 }; 23 24 /* Declare this as an array without bounds so that no matter what small data 25 support a port and/or library has, this reference will be via the general 26 method for accessing globals. */ 27 extern __IMPORT const union __dmath __infinity[]; 28 29 #define HUGE_VAL (__infinity[0].d) 30 31 #endif /* ! defined (HUGE_VAL) */ 32 33 /* Reentrant ANSI C functions. */ 34 35 #ifndef __math_68881 36 extern double atan _PARAMS((double)); 37 extern double cos _PARAMS((double)); 38 extern double sin _PARAMS((double)); 39 extern double tan _PARAMS((double)); 40 extern double tanh _PARAMS((double)); 41 extern double frexp _PARAMS((double, int *)); 42 extern double modf _PARAMS((double, double *)); 43 extern double ceil _PARAMS((double)); 44 extern double fabs _PARAMS((double)); 45 extern double floor _PARAMS((double)); 46 #endif /* ! defined (__math_68881) */ 47 48 /* Non reentrant ANSI C functions. */ 49 50 #ifndef _REENT_ONLY 51 #ifndef __math_6881 52 extern double acos _PARAMS((double)); 53 extern double asin _PARAMS((double)); 54 extern double atan2 _PARAMS((double, double)); 55 extern double cosh _PARAMS((double)); 56 extern double sinh _PARAMS((double)); 57 extern double exp _PARAMS((double)); 58 extern double ldexp _PARAMS((double, int)); 59 extern double log _PARAMS((double)); 60 extern double log10 _PARAMS((double)); 61 extern double pow _PARAMS((double, double)); 62 extern double sqrt _PARAMS((double)); 63 extern double fmod _PARAMS((double, double)); 64 #endif /* ! defined (__math_68881) */ 65 #endif /* ! defined (_REENT_ONLY) */ 66 67 #ifndef __STRICT_ANSI__ 68 69 /* Non ANSI double precision functions. */ 70 71 extern double infinity _PARAMS((void)); 72 extern double nan _PARAMS((void)); 73 extern int isnan _PARAMS((double)); 74 extern int isinf _PARAMS((double)); 75 extern int finite _PARAMS((double)); 76 extern double copysign _PARAMS((double, double)); 77 extern int ilogb _PARAMS((double)); 78 79 extern double asinh _PARAMS((double)); 80 extern double cbrt _PARAMS((double)); 81 extern double nextafter _PARAMS((double, double)); 82 extern double rint _PARAMS((double)); 83 extern double scalbn _PARAMS((double, int)); 84 85 #ifndef __math_68881 86 extern double log1p _PARAMS((double)); 87 extern double expm1 _PARAMS((double)); 88 #endif /* ! defined (__math_68881) */ 89 90 #ifndef _REENT_ONLY 91 extern double acosh _PARAMS((double)); 92 extern double atanh _PARAMS((double)); 93 extern double remainder _PARAMS((double, double)); 94 extern double gamma _PARAMS((double)); 95 extern double gamma_r _PARAMS((double, int *)); 96 extern double lgamma _PARAMS((double)); 97 extern double lgamma_r _PARAMS((double, int *)); 98 extern double erf _PARAMS((double)); 99 extern double erfc _PARAMS((double)); 100 extern double y0 _PARAMS((double)); 101 extern double y1 _PARAMS((double)); 102 extern double yn _PARAMS((int, double)); 103 extern double j0 _PARAMS((double)); 104 extern double j1 _PARAMS((double)); 105 extern double jn _PARAMS((int, double)); 106 #define log2(x) (log (x) / M_LOG2_E) 107 108 #ifndef __math_68881 109 extern double hypot _PARAMS((double, double)); 110 #endif 111 112 extern double cabs(); 113 extern double drem _PARAMS((double, double)); 114 115 #endif /* ! defined (_REENT_ONLY) */ 116 117 /* Single precision versions of ANSI functions. */ 118 119 extern float atanf _PARAMS((float)); 120 extern float cosf _PARAMS((float)); 121 extern float sinf _PARAMS((float)); 122 extern float tanf _PARAMS((float)); 123 extern float tanhf _PARAMS((float)); 124 extern float frexpf _PARAMS((float, int *)); 125 extern float modff _PARAMS((float, float *)); 126 extern float ceilf _PARAMS((float)); 127 extern float fabsf _PARAMS((float)); 128 extern float floorf _PARAMS((float)); 129 130 #ifndef _REENT_ONLY 131 extern float acosf _PARAMS((float)); 132 extern float asinf _PARAMS((float)); 133 extern float atan2f _PARAMS((float, float)); 134 extern float coshf _PARAMS((float)); 135 extern float sinhf _PARAMS((float)); 136 extern float expf _PARAMS((float)); 137 extern float ldexpf _PARAMS((float, int)); 138 extern float logf _PARAMS((float)); 139 extern float log10f _PARAMS((float)); 140 extern float powf _PARAMS((float, float)); 141 extern float sqrtf _PARAMS((float)); 142 extern float fmodf _PARAMS((float, float)); 143 #endif /* ! defined (_REENT_ONLY) */ 144 145 /* Other single precision functions. */ 146 147 extern float infinityf _PARAMS((void)); 148 extern float nanf _PARAMS((void)); 149 extern int isnanf _PARAMS((float)); 150 extern int isinff _PARAMS((float)); 151 extern int finitef _PARAMS((float)); 152 extern float copysignf _PARAMS((float, float)); 153 extern int ilogbf _PARAMS((float)); 154 155 extern float asinhf _PARAMS((float)); 156 extern float cbrtf _PARAMS((float)); 157 extern float nextafterf _PARAMS((float, float)); 158 extern float rintf _PARAMS((float)); 159 extern float scalbnf _PARAMS((float, int)); 160 extern float log1pf _PARAMS((float)); 161 extern float expm1f _PARAMS((float)); 162 163 #ifndef _REENT_ONLY 164 extern float acoshf _PARAMS((float)); 165 extern float atanhf _PARAMS((float)); 166 extern float remainderf _PARAMS((float, float)); 167 extern float gammaf _PARAMS((float)); 168 extern float gammaf_r _PARAMS((float, int *)); 169 extern float lgammaf _PARAMS((float)); 170 extern float lgammaf_r _PARAMS((float, int *)); 171 extern float erff _PARAMS((float)); 172 extern float erfcf _PARAMS((float)); 173 extern float y0f _PARAMS((float)); 174 extern float y1f _PARAMS((float)); 175 extern float ynf _PARAMS((int, float)); 176 extern float j0f _PARAMS((float)); 177 extern float j1f _PARAMS((float)); 178 extern float jnf _PARAMS((int, float)); 179 #define log2f(x) (logf (x) / (float) M_LOG2_E) 180 extern float hypotf _PARAMS((float, float)); 181 182 extern float cabsf(); 183 extern float dremf _PARAMS((float, float)); 184 185 #endif /* ! defined (_REENT_ONLY) */ 186 187 /* The gamma functions use a global variable, signgam. */ 188 #ifndef _REENT_ONLY 189 #define signgam (*__signgam()) 190 extern int *__signgam _PARAMS((void)); 191 #endif /* ! defined (_REENT_ONLY) */ 192 193 #define __signgam_r(ptr) ((ptr)->_new._reent._gamma_signgam) 194 195 /* The exception structure passed to the matherr routine. */ 196 197 #ifdef __cplusplus 198 struct __exception 199 #else 200 struct exception 201 #endif 202 { 203 int type; 204 char *name; 205 double arg1; 206 double arg2; 207 double retval; 208 int err; 209 }; 210 211 #ifdef __cplusplus 212 extern int matherr _PARAMS((struct __exception *e)); 213 #else 214 extern int matherr _PARAMS((struct exception *e)); 215 #endif 216 217 /* Values for the type field of struct exception. */ 218 219 #define DOMAIN 1 220 #define SING 2 221 #define OVERFLOW 3 222 #define UNDERFLOW 4 223 #define TLOSS 5 224 #define PLOSS 6 225 226 /* Useful constants. */ 227 228 #define M_E 2.7182818284590452354 229 #define M_LOG2E 1.4426950408889634074 230 #define M_LOG10E 0.43429448190325182765 231 #define M_LN2 0.69314718055994530942 232 #define M_LN10 2.30258509299404568402 233 #define M_PI 3.14159265358979323846 234 #define M_TWOPI (M_PI * 2.0) 235 #define M_PI_2 1.57079632679489661923 236 #define M_PI_4 0.78539816339744830962 237 #define M_3PI_4 2.3561944901923448370E0 238 #define M_SQRTPI 1.77245385090551602792981 239 #define M_1_PI 0.31830988618379067154 240 #define M_2_PI 0.63661977236758134308 241 #define M_2_SQRTPI 1.12837916709551257390 242 #define M_SQRT2 1.41421356237309504880 243 #define M_SQRT1_2 0.70710678118654752440 244 #define M_LN2LO 1.9082149292705877000E-10 245 #define M_LN2HI 6.9314718036912381649E-1 246 #define M_SQRT3 1.73205080756887719000 247 #define M_IVLN10 0.43429448190325182765 /* 1 / log(10) */ 248 #define M_LOG2_E 0.693147180559945309417 249 #define M_INVLN2 1.4426950408889633870E0 /* 1 / log(2) */ 250 251 /* Global control over fdlibm error handling. */ 252 253 enum __fdlibm_version 254 { 255 __fdlibm_ieee = -1, 256 __fdlibm_svid, 257 __fdlibm_xopen, 258 __fdlibm_posix 259 }; 260 261 #define _LIB_VERSION_TYPE enum __fdlibm_version 262 #define _LIB_VERSION __fdlib_version 263 264 extern __IMPORT _CONST _LIB_VERSION_TYPE _LIB_VERSION; 265 266 #define _IEEE_ __fdlibm_ieee 267 #define _SVID_ __fdlibm_svid 268 #define _XOPEN_ __fdlibm_xopen 269 #define _POSIX_ __fdlibm_posix 270 271 #endif /* ! defined (__STRICT_ANSI__) */ 272 273 #ifdef __FAST_MATH__ 274 #include <machine/fastmath.h> 275 #endif 276 277 #ifdef __cplusplus 278 } 279 #endif 280 #endif /* _MATH_H_ */ |