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