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