xref: /inferno-os/libmath/fdlibm/fdlibm.h (revision 7ef44d652ae9e5e1f5b3465d73684e4a54de73c0)
1 /* derived from /netlib/fdlibm */
2 #include "lib9.h"
3 
4 /* @(#)fdlibm.h 1.5 95/01/18 */
5 /*
6  * ====================================================
7  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
8  *
9  * Developed at SunSoft, a Sun Microsystems, Inc. business.
10  * Permission to use, copy, modify, and distribute this
11  * software is freely granted, provided that this notice
12  * is preserved.
13  * ====================================================
14  */
15 
16 
17 #ifdef USE_FPdbleword
18 #define __HI(x) ((FPdbleword*)&x)->hi
19 #define __LO(x) ((FPdbleword*)&x)->lo
20 #define __HIp(x) ((FPdbleword*)x)->hi
21 #define __LOp(x) ((FPdbleword*)x)->lo
22 #else
23 #ifdef __LITTLE_ENDIAN
24 #define __HI(x) *(1+(int*)&x)
25 #define __LO(x) *(int*)&x
26 #define __HIp(x) *(1+(int*)x)
27 #define __LOp(x) *(int*)x
28 #else
29 #define __HI(x) *(int*)&x
30 #define __LO(x) *(1+(int*)&x)
31 #define __HIp(x) *(int*)x
32 #define __LOp(x) *(1+(int*)x)
33 #endif
34 #endif
35 
36 /*
37  * ANSI/POSIX
38  */
39 extern double acos(double);
40 extern double asin(double);
41 extern double atan(double);
42 extern double atan2(double, double);
43 extern double cos(double);
44 extern double sin(double);
45 extern double tan(double);
46 
47 extern double cosh(double);
48 extern double sinh(double);
49 extern double tanh(double);
50 
51 extern double exp(double);
52 extern double frexp(double, int *);
53 extern double ldexp(double, int);
54 extern double log(double);
55 extern double log10(double);
56 extern double modf(double, double *);
57 
58 extern double pow(double, double);
59 extern double sqrt(double);
60 
61 extern double ceil(double);
62 extern double fabs(double);
63 extern double floor(double);
64 extern double fmod(double, double);
65 
66 extern double erf(double);
67 extern double erfc(double);
68 extern double gamma(double);
69 extern double hypot(double, double);
70 extern int finite(double);
71 extern double j0(double);
72 extern double j1(double);
73 extern double jn(int, double);
74 extern double lgamma(double);
75 extern double y0(double);
76 extern double y1(double);
77 extern double yn(int, double);
78 
79 extern double acosh(double);
80 extern double asinh(double);
81 extern double atanh(double);
82 extern double cbrt(double);
83 extern double logb(double);
84 extern double nextafter(double, double);
85 extern double remainder(double, double);
86 extern double scalb(double, double);
87 
88 /*
89  * IEEE Test Vector
90  */
91 extern double significand(double);
92 
93 /*
94  * Functions callable from C, intended to support IEEE arithmetic.
95  */
96 extern double copysign(double, double);
97 extern int ilogb(double);
98 extern double rint(double);
99 extern double scalbn(double, int);
100 
101 /*
102  * BSD math library entry points
103  */
104 extern double expm1(double);
105 extern double log1p(double);
106 
107 /*
108  * Reentrant version of gamma & lgamma; passes signgam back by reference
109  * as the second argument; user must allocate space for signgam.
110  */
111 #ifdef _REENTRANT
112 extern double gamma_r(double, int *);
113 extern double lgamma_r(double, int *);
114 #endif	/* _REENTRANT */
115 
116 /* ieee style elementary functions */
117 extern double __ieee754_sqrt(double);
118 extern double __ieee754_acos(double);
119 extern double __ieee754_acosh(double);
120 extern double __ieee754_log(double);
121 extern double __ieee754_atanh(double);
122 extern double __ieee754_asin(double);
123 extern double __ieee754_atan2(double,double);
124 extern double __ieee754_exp(double);
125 extern double __ieee754_cosh(double);
126 extern double __ieee754_fmod(double,double);
127 extern double __ieee754_pow(double,double);
128 extern double __ieee754_lgamma_r(double,int *);
129 extern double __ieee754_gamma_r(double,int *);
130 extern double __ieee754_lgamma(double);
131 extern double __ieee754_gamma(double);
132 extern double __ieee754_log10(double);
133 extern double __ieee754_sinh(double);
134 extern double __ieee754_hypot(double,double);
135 extern double __ieee754_j0(double);
136 extern double __ieee754_j1(double);
137 extern double __ieee754_y0(double);
138 extern double __ieee754_y1(double);
139 extern double __ieee754_jn(int,double);
140 extern double __ieee754_yn(int,double);
141 extern double __ieee754_remainder(double,double);
142 extern int    __ieee754_rem_pio2(double,double*);
143 extern double __ieee754_scalb(double,int);
144 
145 /* fdlibm kernel function */
146 extern double __kernel_standard(double,double,int);
147 extern double __kernel_sin(double,double,int);
148 extern double __kernel_cos(double,double);
149 extern double __kernel_tan(double,double,int);
150 extern int    __kernel_rem_pio2(double*,double*,int,int,int,const int*);
151