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