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