1 /* math.h -- Definitions for the math floating point package. */
10 #include <machine/ieeefp.h>
15 /* Define HUGE_VAL as infinity, unless HUGE_VAL is already defined
16 (which might have been done by something like math-68881.h). */
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
[];
29 #define HUGE_VAL (__infinity[0].d)
31 #endif /* ! defined (HUGE_VAL) */
33 /* Reentrant ANSI C functions. */
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) */
48 /* Non reentrant ANSI C functions. */
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) */
67 #ifndef __STRICT_ANSI__
69 /* Non ANSI double precision functions. */
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));
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));
86 extern double log1p
_PARAMS((double));
87 extern double expm1
_PARAMS((double));
88 #endif /* ! defined (__math_68881) */
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)
109 extern double hypot
_PARAMS((double, double));
112 extern double cabs();
113 extern double drem
_PARAMS((double, double));
115 #endif /* ! defined (_REENT_ONLY) */
117 /* Single precision versions of ANSI functions. */
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));
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) */
145 /* Other single precision functions. */
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));
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));
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));
182 extern float cabsf();
183 extern float dremf
_PARAMS((float, float));
185 #endif /* ! defined (_REENT_ONLY) */
187 /* The gamma functions use a global variable, signgam. */
189 #define signgam (*__signgam())
190 extern int *__signgam
_PARAMS((void));
191 #endif /* ! defined (_REENT_ONLY) */
193 #define __signgam_r(ptr) ((ptr)->_new._reent._gamma_signgam)
195 /* The exception structure passed to the matherr routine. */
212 extern int matherr
_PARAMS((struct __exception
*e
));
214 extern int matherr
_PARAMS((struct exception
*e
));
217 /* Values for the type field of struct exception. */
226 /* Useful constants. */
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) */
251 /* Global control over fdlibm error handling. */
253 enum __fdlibm_version
261 #define _LIB_VERSION_TYPE enum __fdlibm_version
262 #define _LIB_VERSION __fdlib_version
264 extern __IMPORT _CONST _LIB_VERSION_TYPE _LIB_VERSION
;
266 #define _IEEE_ __fdlibm_ieee
267 #define _SVID_ __fdlibm_svid
268 #define _XOPEN_ __fdlibm_xopen
269 #define _POSIX_ __fdlibm_posix
271 #endif /* ! defined (__STRICT_ANSI__) */
274 #include <machine/fastmath.h>
280 #endif /* _MATH_H_ */