xref: /inferno-os/libmath/fdlibm/fdlibm.h (revision 1aff7a0a7dab24c5871eb95737c86616c9fd848b)
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