Merge pull request #297 from t-b/upgrade_msys_openssl_101m
[msysgit.git] / include / math.h
blob255bf3bffff55b801336e78d724a26261b1ccd53
1 /* math.h -- Definitions for the math floating point package. */
3 #ifndef _MATH_H_
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 #define _MATH_H_
9 #include <sys/reent.h>
10 #include <machine/ieeefp.h>
11 #include "_ansi.h"
13 #ifndef HUGE_VAL
15 /* Define HUGE_VAL as infinity, unless HUGE_VAL is already defined
16 (which might have been done by something like math-68881.h). */
18 union __dmath
20 __uint32_t i[2];
21 double d;
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. */
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) */
48 /* Non reentrant ANSI C functions. */
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) */
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));
85 #ifndef __math_68881
86 extern double log1p _PARAMS((double));
87 extern double expm1 _PARAMS((double));
88 #endif /* ! defined (__math_68881) */
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)
108 #ifndef __math_68881
109 extern double hypot _PARAMS((double, double));
110 #endif
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));
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) */
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));
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));
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. */
188 #ifndef _REENT_ONLY
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. */
197 #ifdef __cplusplus
198 struct __exception
199 #else
200 struct exception
201 #endif
203 int type;
204 char *name;
205 double arg1;
206 double arg2;
207 double retval;
208 int err;
211 #ifdef __cplusplus
212 extern int matherr _PARAMS((struct __exception *e));
213 #else
214 extern int matherr _PARAMS((struct exception *e));
215 #endif
217 /* Values for the type field of struct exception. */
219 #define DOMAIN 1
220 #define SING 2
221 #define OVERFLOW 3
222 #define UNDERFLOW 4
223 #define TLOSS 5
224 #define PLOSS 6
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
255 __fdlibm_ieee = -1,
256 __fdlibm_svid,
257 __fdlibm_xopen,
258 __fdlibm_posix
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__) */
273 #ifdef __FAST_MATH__
274 #include <machine/fastmath.h>
275 #endif
277 #ifdef __cplusplus
279 #endif
280 #endif /* _MATH_H_ */