Rev 4874 | Rev 6099 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4874 | Rev 4921 | ||
---|---|---|---|
1 | #ifndef _MATH_H_ |
1 | #ifndef _MATH_H_ |
2 | 2 | ||
3 | #define _MATH_H_ |
3 | #define _MATH_H_ |
4 | 4 | ||
5 | #include |
5 | #include |
6 | #include |
6 | #include |
7 | #include "_ansi.h" |
7 | #include "_ansi.h" |
8 | 8 | ||
9 | _BEGIN_STD_C |
9 | _BEGIN_STD_C |
10 | 10 | ||
11 | /* __dmath, __fmath, and __ldmath are only here for backwards compatibility |
11 | /* __dmath, __fmath, and __ldmath are only here for backwards compatibility |
12 | * in case any code used them. They are no longer used by Newlib, itself, |
12 | * in case any code used them. They are no longer used by Newlib, itself, |
13 | * other than legacy. */ |
13 | * other than legacy. */ |
14 | union __dmath |
14 | union __dmath |
15 | { |
15 | { |
16 | double d; |
16 | double d; |
17 | __ULong i[2]; |
17 | __ULong i[2]; |
18 | }; |
18 | }; |
19 | 19 | ||
20 | union __fmath |
20 | union __fmath |
21 | { |
21 | { |
22 | float f; |
22 | float f; |
23 | __ULong i[1]; |
23 | __ULong i[1]; |
24 | }; |
24 | }; |
25 | 25 | ||
26 | #if defined(_HAVE_LONG_DOUBLE) |
26 | #if defined(_HAVE_LONG_DOUBLE) |
27 | union __ldmath |
27 | union __ldmath |
28 | { |
28 | { |
29 | long double ld; |
29 | long double ld; |
30 | __ULong i[4]; |
30 | __ULong i[4]; |
31 | }; |
31 | }; |
32 | #endif |
32 | #endif |
33 | 33 | ||
34 | /* Natural log of 2 */ |
34 | /* Natural log of 2 */ |
35 | #define _M_LN2 0.693147180559945309417 |
35 | #define _M_LN2 0.693147180559945309417 |
36 | - | ||
37 | #if defined(__GNUC__) && \ |
36 | |
38 | ( (__GNUC__ >= 4) || \ |
- | |
39 | ( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 3) ) ) |
- | |
40 | 37 | #if __GNUC_PREREQ (3, 3) |
|
41 | /* gcc >= 3.3 implicitly defines builtins for HUGE_VALx values. */ |
38 | /* gcc >= 3.3 implicitly defines builtins for HUGE_VALx values. */ |
42 | 39 | ||
43 | # ifndef HUGE_VAL |
40 | # ifndef HUGE_VAL |
44 | # define HUGE_VAL (__builtin_huge_val()) |
41 | # define HUGE_VAL (__builtin_huge_val()) |
45 | # endif |
42 | # endif |
46 | 43 | ||
47 | # ifndef HUGE_VALF |
44 | # ifndef HUGE_VALF |
48 | # define HUGE_VALF (__builtin_huge_valf()) |
45 | # define HUGE_VALF (__builtin_huge_valf()) |
49 | # endif |
46 | # endif |
50 | 47 | ||
51 | # ifndef HUGE_VALL |
48 | # ifndef HUGE_VALL |
52 | # define HUGE_VALL (__builtin_huge_vall()) |
49 | # define HUGE_VALL (__builtin_huge_vall()) |
53 | # endif |
50 | # endif |
54 | 51 | ||
55 | # ifndef INFINITY |
52 | # ifndef INFINITY |
56 | # define INFINITY (__builtin_inff()) |
53 | # define INFINITY (__builtin_inff()) |
57 | # endif |
54 | # endif |
58 | 55 | ||
59 | # ifndef NAN |
56 | # ifndef NAN |
60 | # define NAN (__builtin_nanf("")) |
57 | # define NAN (__builtin_nanf("")) |
61 | # endif |
58 | # endif |
62 | 59 | ||
63 | #else /* !gcc >= 3.3 */ |
60 | #else /* !gcc >= 3.3 */ |
64 | 61 | ||
65 | /* No builtins. Use fixed defines instead. (All 3 HUGE plus the INFINITY |
62 | /* No builtins. Use fixed defines instead. (All 3 HUGE plus the INFINITY |
66 | * and NAN macros are required to be constant expressions. Using a variable-- |
63 | * and NAN macros are required to be constant expressions. Using a variable-- |
67 | * even a static const--does not meet this requirement, as it cannot be |
64 | * even a static const--does not meet this requirement, as it cannot be |
68 | * evaluated at translation time.) |
65 | * evaluated at translation time.) |
69 | * The infinities are done using numbers that are far in excess of |
66 | * The infinities are done using numbers that are far in excess of |
70 | * something that would be expected to be encountered in a floating-point |
67 | * something that would be expected to be encountered in a floating-point |
71 | * implementation. (A more certain way uses values from float.h, but that is |
68 | * implementation. (A more certain way uses values from float.h, but that is |
72 | * avoided because system includes are not supposed to include each other.) |
69 | * avoided because system includes are not supposed to include each other.) |
73 | * This method might produce warnings from some compilers. (It does in |
70 | * This method might produce warnings from some compilers. (It does in |
74 | * newer GCCs, but not for ones that would hit this #else.) If this happens, |
71 | * newer GCCs, but not for ones that would hit this #else.) If this happens, |
75 | * please report details to the Newlib mailing list. */ |
72 | * please report details to the Newlib mailing list. */ |
76 | 73 | ||
77 | #ifndef HUGE_VAL |
74 | #ifndef HUGE_VAL |
78 | #define HUGE_VAL (1.0e999999999) |
75 | #define HUGE_VAL (1.0e999999999) |
79 | #endif |
76 | #endif |
80 | 77 | ||
81 | #ifndef HUGE_VALF |
78 | #ifndef HUGE_VALF |
82 | #define HUGE_VALF (1.0e999999999F) |
79 | #define HUGE_VALF (1.0e999999999F) |
83 | #endif |
80 | #endif |
84 | 81 | ||
85 | #if !defined(HUGE_VALL) && defined(_HAVE_LONG_DOUBLE) |
82 | #if !defined(HUGE_VALL) && defined(_HAVE_LONG_DOUBLE) |
86 | #define HUGE_VALL (1.0e999999999L) |
83 | #define HUGE_VALL (1.0e999999999L) |
87 | #endif |
84 | #endif |
88 | 85 | ||
89 | #if !defined(INFINITY) |
86 | #if !defined(INFINITY) |
90 | #define INFINITY (HUGE_VALF) |
87 | #define INFINITY (HUGE_VALF) |
91 | #endif |
88 | #endif |
92 | 89 | ||
93 | #if !defined(NAN) |
90 | #if !defined(NAN) |
94 | #if defined(__GNUC__) && defined(__cplusplus) |
91 | #if defined(__GNUC__) && defined(__cplusplus) |
95 | /* Exception: older g++ versions warn about the divide by 0 used in the |
92 | /* Exception: older g++ versions warn about the divide by 0 used in the |
96 | * normal case (even though older gccs do not). This trick suppresses the |
93 | * normal case (even though older gccs do not). This trick suppresses the |
97 | * warning, but causes errors for plain gcc, so is only used in the one |
94 | * warning, but causes errors for plain gcc, so is only used in the one |
98 | * special case. */ |
95 | * special case. */ |
99 | static const union { __ULong __i[1]; float __d; } __Nanf = {0x7FC00000}; |
96 | static const union { __ULong __i[1]; float __d; } __Nanf = {0x7FC00000}; |
100 | #define NAN (__Nanf.__d) |
97 | #define NAN (__Nanf.__d) |
101 | #else |
98 | #else |
102 | #define NAN (0.0F/0.0F) |
99 | #define NAN (0.0F/0.0F) |
103 | #endif |
100 | #endif |
104 | #endif |
101 | #endif |
105 | 102 | ||
106 | #endif /* !gcc >= 3.3 */ |
103 | #endif /* !gcc >= 3.3 */ |
107 | 104 | ||
108 | /* Reentrant ANSI C functions. */ |
105 | /* Reentrant ANSI C functions. */ |
109 | 106 | ||
110 | #ifndef __math_68881 |
107 | #ifndef __math_68881 |
111 | extern double atan _PARAMS((double)); |
108 | extern double atan _PARAMS((double)); |
112 | extern double cos _PARAMS((double)); |
109 | extern double cos _PARAMS((double)); |
113 | extern double sin _PARAMS((double)); |
110 | extern double sin _PARAMS((double)); |
114 | extern double tan _PARAMS((double)); |
111 | extern double tan _PARAMS((double)); |
115 | extern double tanh _PARAMS((double)); |
112 | extern double tanh _PARAMS((double)); |
116 | extern double frexp _PARAMS((double, int *)); |
113 | extern double frexp _PARAMS((double, int *)); |
117 | extern double modf _PARAMS((double, double *)); |
114 | extern double modf _PARAMS((double, double *)); |
118 | extern double ceil _PARAMS((double)); |
115 | extern double ceil _PARAMS((double)); |
119 | extern double fabs _PARAMS((double)); |
116 | extern double fabs _PARAMS((double)); |
120 | extern double floor _PARAMS((double)); |
117 | extern double floor _PARAMS((double)); |
121 | #endif /* ! defined (__math_68881) */ |
118 | #endif /* ! defined (__math_68881) */ |
122 | 119 | ||
123 | /* Non reentrant ANSI C functions. */ |
120 | /* Non reentrant ANSI C functions. */ |
124 | 121 | ||
125 | #ifndef _REENT_ONLY |
122 | #ifndef _REENT_ONLY |
126 | #ifndef __math_68881 |
123 | #ifndef __math_68881 |
127 | extern double acos _PARAMS((double)); |
124 | extern double acos _PARAMS((double)); |
128 | extern double asin _PARAMS((double)); |
125 | extern double asin _PARAMS((double)); |
129 | extern double atan2 _PARAMS((double, double)); |
126 | extern double atan2 _PARAMS((double, double)); |
130 | extern double cosh _PARAMS((double)); |
127 | extern double cosh _PARAMS((double)); |
131 | extern double sinh _PARAMS((double)); |
128 | extern double sinh _PARAMS((double)); |
132 | extern double exp _PARAMS((double)); |
129 | extern double exp _PARAMS((double)); |
133 | extern double ldexp _PARAMS((double, int)); |
130 | extern double ldexp _PARAMS((double, int)); |
134 | extern double log _PARAMS((double)); |
131 | extern double log _PARAMS((double)); |
135 | extern double log10 _PARAMS((double)); |
132 | extern double log10 _PARAMS((double)); |
136 | extern double pow _PARAMS((double, double)); |
133 | extern double pow _PARAMS((double, double)); |
137 | extern double sqrt _PARAMS((double)); |
134 | extern double sqrt _PARAMS((double)); |
138 | extern double fmod _PARAMS((double, double)); |
135 | extern double fmod _PARAMS((double, double)); |
139 | #endif /* ! defined (__math_68881) */ |
136 | #endif /* ! defined (__math_68881) */ |
140 | #endif /* ! defined (_REENT_ONLY) */ |
137 | #endif /* ! defined (_REENT_ONLY) */ |
141 | 138 | ||
142 | #if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L |
139 | #if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L |
143 | 140 | ||
144 | /* ISO C99 types and macros. */ |
141 | /* ISO C99 types and macros. */ |
- | 142 | ||
- | 143 | /* FIXME: FLT_EVAL_METHOD should somehow be gotten from float.h (which is hard, |
|
- | 144 | * considering that the standard says the includes it defines should not |
|
- | 145 | * include other includes that it defines) and that value used. (This can be |
|
- | 146 | * solved, but autoconf has a bug which makes the solution more difficult, so |
|
- | 147 | * it has been skipped for now.) */ |
|
- | 148 | #if !defined(FLT_EVAL_METHOD) && defined(__FLT_EVAL_METHOD__) |
|
- | 149 | #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ |
|
- | 150 | #define __TMP_FLT_EVAL_METHOD |
|
145 | 151 | #endif /* FLT_EVAL_METHOD */ |
|
146 | #ifndef FLT_EVAL_METHOD |
152 | #if defined FLT_EVAL_METHOD |
147 | #define FLT_EVAL_METHOD 0 |
153 | #if FLT_EVAL_METHOD == 0 |
148 | typedef float float_t; |
154 | typedef float float_t; |
- | 155 | typedef double double_t; |
|
- | 156 | #elif FLT_EVAL_METHOD == 1 |
|
- | 157 | typedef double float_t; |
|
- | 158 | typedef double double_t; |
|
- | 159 | #elif FLT_EVAL_METHOD == 2 |
|
- | 160 | typedef long double float_t; |
|
- | 161 | typedef long double double_t; |
|
- | 162 | #else |
|
- | 163 | /* Implementation-defined. Assume float_t and double_t have been |
|
- | 164 | * defined previously for this configuration (e.g. config.h). */ |
|
- | 165 | #endif |
|
- | 166 | #else |
|
- | 167 | /* Assume basic definitions. */ |
|
- | 168 | typedef float float_t; |
|
- | 169 | typedef double double_t; |
|
- | 170 | #endif |
|
149 | typedef double double_t; |
171 | #if defined(__TMP_FLT_EVAL_METHOD) |
- | 172 | #undef FLT_EVAL_METHOD |
|
150 | #endif /* FLT_EVAL_METHOD */ |
173 | #endif |
151 | 174 | ||
152 | #define FP_NAN 0 |
175 | #define FP_NAN 0 |
153 | #define FP_INFINITE 1 |
176 | #define FP_INFINITE 1 |
154 | #define FP_ZERO 2 |
177 | #define FP_ZERO 2 |
155 | #define FP_SUBNORMAL 3 |
178 | #define FP_SUBNORMAL 3 |
156 | #define FP_NORMAL 4 |
179 | #define FP_NORMAL 4 |
157 | 180 | ||
158 | #ifndef FP_ILOGB0 |
181 | #ifndef FP_ILOGB0 |
159 | # define FP_ILOGB0 (-INT_MAX) |
182 | # define FP_ILOGB0 (-INT_MAX) |
160 | #endif |
183 | #endif |
161 | #ifndef FP_ILOGBNAN |
184 | #ifndef FP_ILOGBNAN |
162 | # define FP_ILOGBNAN INT_MAX |
185 | # define FP_ILOGBNAN INT_MAX |
163 | #endif |
186 | #endif |
164 | 187 | ||
165 | #ifndef MATH_ERRNO |
188 | #ifndef MATH_ERRNO |
166 | # define MATH_ERRNO 1 |
189 | # define MATH_ERRNO 1 |
167 | #endif |
190 | #endif |
168 | #ifndef MATH_ERREXCEPT |
191 | #ifndef MATH_ERREXCEPT |
169 | # define MATH_ERREXCEPT 2 |
192 | # define MATH_ERREXCEPT 2 |
170 | #endif |
193 | #endif |
171 | #ifndef math_errhandling |
194 | #ifndef math_errhandling |
172 | # define math_errhandling MATH_ERRNO |
195 | # define math_errhandling MATH_ERRNO |
173 | #endif |
196 | #endif |
174 | 197 | ||
175 | extern int __isinff (float x); |
198 | extern int __isinff (float x); |
176 | extern int __isinfd (double x); |
199 | extern int __isinfd (double x); |
177 | extern int __isnanf (float x); |
200 | extern int __isnanf (float x); |
178 | extern int __isnand (double x); |
201 | extern int __isnand (double x); |
179 | extern int __fpclassifyf (float x); |
202 | extern int __fpclassifyf (float x); |
180 | extern int __fpclassifyd (double x); |
203 | extern int __fpclassifyd (double x); |
181 | extern int __signbitf (float x); |
204 | extern int __signbitf (float x); |
182 | extern int __signbitd (double x); |
205 | extern int __signbitd (double x); |
183 | 206 | ||
184 | #define fpclassify(__x) \ |
207 | #define fpclassify(__x) \ |
185 | ((sizeof(__x) == sizeof(float)) ? __fpclassifyf(__x) : \ |
208 | ((sizeof(__x) == sizeof(float)) ? __fpclassifyf(__x) : \ |
186 | __fpclassifyd(__x)) |
209 | __fpclassifyd(__x)) |
187 | 210 | ||
188 | #ifndef isfinite |
211 | #ifndef isfinite |
189 | #define isfinite(__y) \ |
212 | #define isfinite(__y) \ |
190 | (__extension__ ({int __cy = fpclassify(__y); \ |
213 | (__extension__ ({int __cy = fpclassify(__y); \ |
191 | __cy != FP_INFINITE && __cy != FP_NAN;})) |
214 | __cy != FP_INFINITE && __cy != FP_NAN;})) |
192 | #endif |
215 | #endif |
193 | 216 | ||
194 | /* Note: isinf and isnan were once functions in newlib that took double |
217 | /* Note: isinf and isnan were once functions in newlib that took double |
195 | * arguments. C99 specifies that these names are reserved for macros |
218 | * arguments. C99 specifies that these names are reserved for macros |
196 | * supporting multiple floating point types. Thus, they are |
219 | * supporting multiple floating point types. Thus, they are |
197 | * now defined as macros. Implementations of the old functions |
220 | * now defined as macros. Implementations of the old functions |
198 | * taking double arguments still exist for compatibility purposes |
221 | * taking double arguments still exist for compatibility purposes |
199 | * (prototypes for them are in |
222 | * (prototypes for them are in |
200 | #ifndef isinf |
223 | #ifndef isinf |
201 | #define isinf(y) (fpclassify(y) == FP_INFINITE) |
224 | #define isinf(y) (fpclassify(y) == FP_INFINITE) |
202 | #endif |
225 | #endif |
203 | 226 | ||
204 | #ifndef isnan |
227 | #ifndef isnan |
205 | #define isnan(y) (fpclassify(y) == FP_NAN) |
228 | #define isnan(y) (fpclassify(y) == FP_NAN) |
206 | #endif |
229 | #endif |
207 | 230 | ||
208 | #define isnormal(y) (fpclassify(y) == FP_NORMAL) |
231 | #define isnormal(y) (fpclassify(y) == FP_NORMAL) |
209 | #define signbit(__x) \ |
232 | #define signbit(__x) \ |
210 | ((sizeof(__x) == sizeof(float)) ? __signbitf(__x) : \ |
233 | ((sizeof(__x) == sizeof(float)) ? __signbitf(__x) : \ |
211 | __signbitd(__x)) |
234 | __signbitd(__x)) |
212 | 235 | ||
213 | #define isgreater(x,y) \ |
236 | #define isgreater(x,y) \ |
214 | (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ |
237 | (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ |
215 | !isunordered(__x,__y) && (__x > __y);})) |
238 | !isunordered(__x,__y) && (__x > __y);})) |
216 | #define isgreaterequal(x,y) \ |
239 | #define isgreaterequal(x,y) \ |
217 | (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ |
240 | (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ |
218 | !isunordered(__x,__y) && (__x >= __y);})) |
241 | !isunordered(__x,__y) && (__x >= __y);})) |
219 | #define isless(x,y) \ |
242 | #define isless(x,y) \ |
220 | (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ |
243 | (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ |
221 | !isunordered(__x,__y) && (__x < __y);})) |
244 | !isunordered(__x,__y) && (__x < __y);})) |
222 | #define islessequal(x,y) \ |
245 | #define islessequal(x,y) \ |
223 | (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ |
246 | (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ |
224 | !isunordered(__x,__y) && (__x <= __y);})) |
247 | !isunordered(__x,__y) && (__x <= __y);})) |
225 | #define islessgreater(x,y) \ |
248 | #define islessgreater(x,y) \ |
226 | (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ |
249 | (__extension__ ({__typeof__(x) __x = (x); __typeof__(y) __y = (y); \ |
227 | !isunordered(__x,__y) && (__x < __y || __x > __y);})) |
250 | !isunordered(__x,__y) && (__x < __y || __x > __y);})) |
228 | 251 | ||
229 | #define isunordered(a,b) \ |
252 | #define isunordered(a,b) \ |
230 | (__extension__ ({__typeof__(a) __a = (a); __typeof__(b) __b = (b); \ |
253 | (__extension__ ({__typeof__(a) __a = (a); __typeof__(b) __b = (b); \ |
231 | fpclassify(__a) == FP_NAN || fpclassify(__b) == FP_NAN;})) |
254 | fpclassify(__a) == FP_NAN || fpclassify(__b) == FP_NAN;})) |
232 | 255 | ||
233 | /* Non ANSI double precision functions. */ |
256 | /* Non ANSI double precision functions. */ |
234 | 257 | ||
235 | extern double infinity _PARAMS((void)); |
258 | extern double infinity _PARAMS((void)); |
236 | extern double nan _PARAMS((const char *)); |
259 | extern double nan _PARAMS((const char *)); |
237 | extern int finite _PARAMS((double)); |
260 | extern int finite _PARAMS((double)); |
238 | extern double copysign _PARAMS((double, double)); |
261 | extern double copysign _PARAMS((double, double)); |
239 | extern double logb _PARAMS((double)); |
262 | extern double logb _PARAMS((double)); |
240 | extern int ilogb _PARAMS((double)); |
263 | extern int ilogb _PARAMS((double)); |
241 | 264 | ||
242 | extern double asinh _PARAMS((double)); |
265 | extern double asinh _PARAMS((double)); |
243 | extern double cbrt _PARAMS((double)); |
266 | extern double cbrt _PARAMS((double)); |
244 | extern double nextafter _PARAMS((double, double)); |
267 | extern double nextafter _PARAMS((double, double)); |
245 | extern double rint _PARAMS((double)); |
268 | extern double rint _PARAMS((double)); |
246 | extern double scalbn _PARAMS((double, int)); |
269 | extern double scalbn _PARAMS((double, int)); |
247 | 270 | ||
248 | extern double exp2 _PARAMS((double)); |
271 | extern double exp2 _PARAMS((double)); |
249 | extern double scalbln _PARAMS((double, long int)); |
272 | extern double scalbln _PARAMS((double, long int)); |
250 | extern double tgamma _PARAMS((double)); |
273 | extern double tgamma _PARAMS((double)); |
251 | extern double nearbyint _PARAMS((double)); |
274 | extern double nearbyint _PARAMS((double)); |
252 | extern long int lrint _PARAMS((double)); |
275 | extern long int lrint _PARAMS((double)); |
253 | extern _LONG_LONG_TYPE int llrint _PARAMS((double)); |
276 | extern _LONG_LONG_TYPE int llrint _PARAMS((double)); |
254 | extern double round _PARAMS((double)); |
277 | extern double round _PARAMS((double)); |
255 | extern long int lround _PARAMS((double)); |
278 | extern long int lround _PARAMS((double)); |
256 | extern long long int llround _PARAMS((double)); |
279 | extern long long int llround _PARAMS((double)); |
257 | extern double trunc _PARAMS((double)); |
280 | extern double trunc _PARAMS((double)); |
258 | extern double remquo _PARAMS((double, double, int *)); |
281 | extern double remquo _PARAMS((double, double, int *)); |
259 | extern double fdim _PARAMS((double, double)); |
282 | extern double fdim _PARAMS((double, double)); |
260 | extern double fmax _PARAMS((double, double)); |
283 | extern double fmax _PARAMS((double, double)); |
261 | extern double fmin _PARAMS((double, double)); |
284 | extern double fmin _PARAMS((double, double)); |
262 | extern double fma _PARAMS((double, double, double)); |
285 | extern double fma _PARAMS((double, double, double)); |
263 | 286 | ||
264 | #ifndef __math_68881 |
287 | #ifndef __math_68881 |
265 | extern double log1p _PARAMS((double)); |
288 | extern double log1p _PARAMS((double)); |
266 | extern double expm1 _PARAMS((double)); |
289 | extern double expm1 _PARAMS((double)); |
267 | #endif /* ! defined (__math_68881) */ |
290 | #endif /* ! defined (__math_68881) */ |
268 | 291 | ||
269 | #ifndef _REENT_ONLY |
292 | #ifndef _REENT_ONLY |
270 | extern double acosh _PARAMS((double)); |
293 | extern double acosh _PARAMS((double)); |
271 | extern double atanh _PARAMS((double)); |
294 | extern double atanh _PARAMS((double)); |
272 | extern double remainder _PARAMS((double, double)); |
295 | extern double remainder _PARAMS((double, double)); |
273 | extern double gamma _PARAMS((double)); |
296 | extern double gamma _PARAMS((double)); |
274 | extern double lgamma _PARAMS((double)); |
297 | extern double lgamma _PARAMS((double)); |
275 | extern double erf _PARAMS((double)); |
298 | extern double erf _PARAMS((double)); |
276 | extern double erfc _PARAMS((double)); |
299 | extern double erfc _PARAMS((double)); |
277 | extern double log2 _PARAMS((double)); |
300 | extern double log2 _PARAMS((double)); |
278 | #if !defined(__cplusplus) |
301 | #if !defined(__cplusplus) |
279 | #define log2(x) (log (x) / _M_LN2) |
302 | #define log2(x) (log (x) / _M_LN2) |
280 | #endif |
303 | #endif |
281 | 304 | ||
282 | #ifndef __math_68881 |
305 | #ifndef __math_68881 |
283 | extern double hypot _PARAMS((double, double)); |
306 | extern double hypot _PARAMS((double, double)); |
284 | #endif |
307 | #endif |
285 | 308 | ||
286 | #endif /* ! defined (_REENT_ONLY) */ |
309 | #endif /* ! defined (_REENT_ONLY) */ |
287 | 310 | ||
288 | /* Single precision versions of ANSI functions. */ |
311 | /* Single precision versions of ANSI functions. */ |
289 | 312 | ||
290 | extern float atanf _PARAMS((float)); |
313 | extern float atanf _PARAMS((float)); |
291 | extern float cosf _PARAMS((float)); |
314 | extern float cosf _PARAMS((float)); |
292 | extern float sinf _PARAMS((float)); |
315 | extern float sinf _PARAMS((float)); |
293 | extern float tanf _PARAMS((float)); |
316 | extern float tanf _PARAMS((float)); |
294 | extern float tanhf _PARAMS((float)); |
317 | extern float tanhf _PARAMS((float)); |
295 | extern float frexpf _PARAMS((float, int *)); |
318 | extern float frexpf _PARAMS((float, int *)); |
296 | extern float modff _PARAMS((float, float *)); |
319 | extern float modff _PARAMS((float, float *)); |
297 | extern float ceilf _PARAMS((float)); |
320 | extern float ceilf _PARAMS((float)); |
298 | extern float fabsf _PARAMS((float)); |
321 | extern float fabsf _PARAMS((float)); |
299 | extern float floorf _PARAMS((float)); |
322 | extern float floorf _PARAMS((float)); |
300 | 323 | ||
301 | #ifndef _REENT_ONLY |
324 | #ifndef _REENT_ONLY |
302 | extern float acosf _PARAMS((float)); |
325 | extern float acosf _PARAMS((float)); |
303 | extern float asinf _PARAMS((float)); |
326 | extern float asinf _PARAMS((float)); |
304 | extern float atan2f _PARAMS((float, float)); |
327 | extern float atan2f _PARAMS((float, float)); |
305 | extern float coshf _PARAMS((float)); |
328 | extern float coshf _PARAMS((float)); |
306 | extern float sinhf _PARAMS((float)); |
329 | extern float sinhf _PARAMS((float)); |
307 | extern float expf _PARAMS((float)); |
330 | extern float expf _PARAMS((float)); |
308 | extern float ldexpf _PARAMS((float, int)); |
331 | extern float ldexpf _PARAMS((float, int)); |
309 | extern float logf _PARAMS((float)); |
332 | extern float logf _PARAMS((float)); |
310 | extern float log10f _PARAMS((float)); |
333 | extern float log10f _PARAMS((float)); |
311 | extern float powf _PARAMS((float, float)); |
334 | extern float powf _PARAMS((float, float)); |
312 | extern float sqrtf _PARAMS((float)); |
335 | extern float sqrtf _PARAMS((float)); |
313 | extern float fmodf _PARAMS((float, float)); |
336 | extern float fmodf _PARAMS((float, float)); |
314 | #endif /* ! defined (_REENT_ONLY) */ |
337 | #endif /* ! defined (_REENT_ONLY) */ |
315 | 338 | ||
316 | /* Other single precision functions. */ |
339 | /* Other single precision functions. */ |
317 | 340 | ||
318 | extern float exp2f _PARAMS((float)); |
341 | extern float exp2f _PARAMS((float)); |
319 | extern float scalblnf _PARAMS((float, long int)); |
342 | extern float scalblnf _PARAMS((float, long int)); |
320 | extern float tgammaf _PARAMS((float)); |
343 | extern float tgammaf _PARAMS((float)); |
321 | extern float nearbyintf _PARAMS((float)); |
344 | extern float nearbyintf _PARAMS((float)); |
322 | extern long int lrintf _PARAMS((float)); |
345 | extern long int lrintf _PARAMS((float)); |
323 | extern _LONG_LONG_TYPE llrintf _PARAMS((float)); |
346 | extern _LONG_LONG_TYPE llrintf _PARAMS((float)); |
324 | extern float roundf _PARAMS((float)); |
347 | extern float roundf _PARAMS((float)); |
325 | extern long int lroundf _PARAMS((float)); |
348 | extern long int lroundf _PARAMS((float)); |
326 | extern long long int llroundf _PARAMS((float)); |
349 | extern long long int llroundf _PARAMS((float)); |
327 | extern float truncf _PARAMS((float)); |
350 | extern float truncf _PARAMS((float)); |
328 | extern float remquof _PARAMS((float, float, int *)); |
351 | extern float remquof _PARAMS((float, float, int *)); |
329 | extern float fdimf _PARAMS((float, float)); |
352 | extern float fdimf _PARAMS((float, float)); |
330 | extern float fmaxf _PARAMS((float, float)); |
353 | extern float fmaxf _PARAMS((float, float)); |
331 | extern float fminf _PARAMS((float, float)); |
354 | extern float fminf _PARAMS((float, float)); |
332 | extern float fmaf _PARAMS((float, float, float)); |
355 | extern float fmaf _PARAMS((float, float, float)); |
333 | 356 | ||
334 | extern float infinityf _PARAMS((void)); |
357 | extern float infinityf _PARAMS((void)); |
335 | extern float nanf _PARAMS((const char *)); |
358 | extern float nanf _PARAMS((const char *)); |
336 | extern int finitef _PARAMS((float)); |
359 | extern int finitef _PARAMS((float)); |
337 | extern float copysignf _PARAMS((float, float)); |
360 | extern float copysignf _PARAMS((float, float)); |
338 | extern float logbf _PARAMS((float)); |
361 | extern float logbf _PARAMS((float)); |
339 | extern int ilogbf _PARAMS((float)); |
362 | extern int ilogbf _PARAMS((float)); |
340 | 363 | ||
341 | extern float asinhf _PARAMS((float)); |
364 | extern float asinhf _PARAMS((float)); |
342 | extern float cbrtf _PARAMS((float)); |
365 | extern float cbrtf _PARAMS((float)); |
343 | extern float nextafterf _PARAMS((float, float)); |
366 | extern float nextafterf _PARAMS((float, float)); |
344 | extern float rintf _PARAMS((float)); |
367 | extern float rintf _PARAMS((float)); |
345 | extern float scalbnf _PARAMS((float, int)); |
368 | extern float scalbnf _PARAMS((float, int)); |
346 | extern float log1pf _PARAMS((float)); |
369 | extern float log1pf _PARAMS((float)); |
347 | extern float expm1f _PARAMS((float)); |
370 | extern float expm1f _PARAMS((float)); |
348 | 371 | ||
349 | #ifndef _REENT_ONLY |
372 | #ifndef _REENT_ONLY |
350 | extern float acoshf _PARAMS((float)); |
373 | extern float acoshf _PARAMS((float)); |
351 | extern float atanhf _PARAMS((float)); |
374 | extern float atanhf _PARAMS((float)); |
352 | extern float remainderf _PARAMS((float, float)); |
375 | extern float remainderf _PARAMS((float, float)); |
353 | extern float gammaf _PARAMS((float)); |
376 | extern float gammaf _PARAMS((float)); |
354 | extern float lgammaf _PARAMS((float)); |
377 | extern float lgammaf _PARAMS((float)); |
355 | extern float erff _PARAMS((float)); |
378 | extern float erff _PARAMS((float)); |
356 | extern float erfcf _PARAMS((float)); |
379 | extern float erfcf _PARAMS((float)); |
357 | extern float log2f _PARAMS((float)); |
380 | extern float log2f _PARAMS((float)); |
358 | #if !defined(__cplusplus) |
- | |
359 | #define log2f(x) (logf (x) / (float_t) _M_LN2) |
- | |
360 | #endif |
- | |
361 | extern float hypotf _PARAMS((float, float)); |
381 | extern float hypotf _PARAMS((float, float)); |
362 | #endif /* ! defined (_REENT_ONLY) */ |
382 | #endif /* ! defined (_REENT_ONLY) */ |
363 | 383 | ||
364 | /* On platforms where long double equals double. */ |
384 | /* On platforms where long double equals double. */ |
365 | #ifdef _LDBL_EQ_DBL |
385 | #ifdef _LDBL_EQ_DBL |
366 | /* Reentrant ANSI C functions. */ |
386 | /* Reentrant ANSI C functions. */ |
367 | #ifndef __math_68881 |
387 | #ifndef __math_68881 |
368 | extern long double atanl _PARAMS((long double)); |
388 | extern long double atanl _PARAMS((long double)); |
369 | extern long double cosl _PARAMS((long double)); |
389 | extern long double cosl _PARAMS((long double)); |
370 | extern long double sinl _PARAMS((long double)); |
390 | extern long double sinl _PARAMS((long double)); |
371 | extern long double tanl _PARAMS((long double)); |
391 | extern long double tanl _PARAMS((long double)); |
372 | extern long double tanhl _PARAMS((long double)); |
392 | extern long double tanhl _PARAMS((long double)); |
373 | extern long double frexpl _PARAMS((long double value, int *)); |
393 | extern long double frexpl _PARAMS((long double value, int *)); |
374 | extern long double modfl _PARAMS((long double, long double *)); |
394 | extern long double modfl _PARAMS((long double, long double *)); |
375 | extern long double ceill _PARAMS((long double)); |
395 | extern long double ceill _PARAMS((long double)); |
376 | extern long double fabsl _PARAMS((long double)); |
396 | extern long double fabsl _PARAMS((long double)); |
377 | extern long double floorl _PARAMS((long double)); |
397 | extern long double floorl _PARAMS((long double)); |
378 | extern long double log1pl _PARAMS((long double)); |
398 | extern long double log1pl _PARAMS((long double)); |
379 | extern long double expm1l _PARAMS((long double)); |
399 | extern long double expm1l _PARAMS((long double)); |
380 | #endif /* ! defined (__math_68881) */ |
400 | #endif /* ! defined (__math_68881) */ |
381 | /* Non reentrant ANSI C functions. */ |
401 | /* Non reentrant ANSI C functions. */ |
382 | #ifndef _REENT_ONLY |
402 | #ifndef _REENT_ONLY |
383 | #ifndef __math_68881 |
403 | #ifndef __math_68881 |
384 | extern long double acosl _PARAMS((long double)); |
404 | extern long double acosl _PARAMS((long double)); |
385 | extern long double asinl _PARAMS((long double)); |
405 | extern long double asinl _PARAMS((long double)); |
386 | extern long double atan2l _PARAMS((long double, long double)); |
406 | extern long double atan2l _PARAMS((long double, long double)); |
387 | extern long double coshl _PARAMS((long double)); |
407 | extern long double coshl _PARAMS((long double)); |
388 | extern long double sinhl _PARAMS((long double)); |
408 | extern long double sinhl _PARAMS((long double)); |
389 | extern long double expl _PARAMS((long double)); |
409 | extern long double expl _PARAMS((long double)); |
390 | extern long double ldexpl _PARAMS((long double, int)); |
410 | extern long double ldexpl _PARAMS((long double, int)); |
391 | extern long double logl _PARAMS((long double)); |
411 | extern long double logl _PARAMS((long double)); |
392 | extern long double log10l _PARAMS((long double)); |
412 | extern long double log10l _PARAMS((long double)); |
393 | extern long double powl _PARAMS((long double, long double)); |
413 | extern long double powl _PARAMS((long double, long double)); |
394 | extern long double sqrtl _PARAMS((long double)); |
414 | extern long double sqrtl _PARAMS((long double)); |
395 | extern long double fmodl _PARAMS((long double, long double)); |
415 | extern long double fmodl _PARAMS((long double, long double)); |
396 | extern long double hypotl _PARAMS((long double, long double)); |
416 | extern long double hypotl _PARAMS((long double, long double)); |
397 | #endif /* ! defined (__math_68881) */ |
417 | #endif /* ! defined (__math_68881) */ |
398 | #endif /* ! defined (_REENT_ONLY) */ |
418 | #endif /* ! defined (_REENT_ONLY) */ |
399 | extern long double copysignl _PARAMS((long double, long double)); |
419 | extern long double copysignl _PARAMS((long double, long double)); |
400 | extern long double nanl _PARAMS((const char *)); |
420 | extern long double nanl _PARAMS((const char *)); |
401 | extern int ilogbl _PARAMS((long double)); |
421 | extern int ilogbl _PARAMS((long double)); |
402 | extern long double asinhl _PARAMS((long double)); |
422 | extern long double asinhl _PARAMS((long double)); |
403 | extern long double cbrtl _PARAMS((long double)); |
423 | extern long double cbrtl _PARAMS((long double)); |
404 | extern long double nextafterl _PARAMS((long double, long double)); |
424 | extern long double nextafterl _PARAMS((long double, long double)); |
405 | extern long double rintl _PARAMS((long double)); |
425 | extern long double rintl _PARAMS((long double)); |
406 | extern long double scalbnl _PARAMS((long double, int)); |
426 | extern long double scalbnl _PARAMS((long double, int)); |
407 | extern long double exp2l _PARAMS((long double)); |
427 | extern long double exp2l _PARAMS((long double)); |
408 | extern long double scalblnl _PARAMS((long double, long)); |
428 | extern long double scalblnl _PARAMS((long double, long)); |
409 | extern long double tgammal _PARAMS((long double)); |
429 | extern long double tgammal _PARAMS((long double)); |
410 | extern long double nearbyintl _PARAMS((long double)); |
430 | extern long double nearbyintl _PARAMS((long double)); |
411 | extern long int lrintl _PARAMS((long double)); |
431 | extern long int lrintl _PARAMS((long double)); |
412 | extern long long int llrintl _PARAMS((long double)); |
432 | extern long long int llrintl _PARAMS((long double)); |
413 | extern long double roundl _PARAMS((long double)); |
433 | extern long double roundl _PARAMS((long double)); |
414 | extern long lroundl _PARAMS((long double)); |
434 | extern long lroundl _PARAMS((long double)); |
415 | extern _LONG_LONG_TYPE int llroundl _PARAMS((long double)); |
435 | extern _LONG_LONG_TYPE int llroundl _PARAMS((long double)); |
416 | extern long double truncl _PARAMS((long double)); |
436 | extern long double truncl _PARAMS((long double)); |
417 | extern long double remquol _PARAMS((long double, long double, int *)); |
437 | extern long double remquol _PARAMS((long double, long double, int *)); |
418 | extern long double fdiml _PARAMS((long double, long double)); |
438 | extern long double fdiml _PARAMS((long double, long double)); |
419 | extern long double fmaxl _PARAMS((long double, long double)); |
439 | extern long double fmaxl _PARAMS((long double, long double)); |
420 | extern long double fminl _PARAMS((long double, long double)); |
440 | extern long double fminl _PARAMS((long double, long double)); |
421 | extern long double fmal _PARAMS((long double, long double, long double)); |
441 | extern long double fmal _PARAMS((long double, long double, long double)); |
422 | #ifndef _REENT_ONLY |
442 | #ifndef _REENT_ONLY |
423 | extern long double acoshl _PARAMS((long double)); |
443 | extern long double acoshl _PARAMS((long double)); |
424 | extern long double atanhl _PARAMS((long double)); |
444 | extern long double atanhl _PARAMS((long double)); |
425 | extern long double remainderl _PARAMS((long double, long double)); |
445 | extern long double remainderl _PARAMS((long double, long double)); |
426 | extern long double lgammal _PARAMS((long double)); |
446 | extern long double lgammal _PARAMS((long double)); |
427 | extern long double erfl _PARAMS((long double)); |
447 | extern long double erfl _PARAMS((long double)); |
428 | extern long double erfcl _PARAMS((long double)); |
448 | extern long double erfcl _PARAMS((long double)); |
429 | #endif /* ! defined (_REENT_ONLY) */ |
449 | #endif /* ! defined (_REENT_ONLY) */ |
430 | #else /* !_LDBL_EQ_DBL */ |
450 | #else /* !_LDBL_EQ_DBL */ |
431 | #ifdef __i386__ |
451 | #ifdef __i386__ |
432 | /* Other long double precision functions. */ |
452 | /* Other long double precision functions. */ |
433 | extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE)); |
453 | extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE)); |
434 | extern long int lrintl _PARAMS((_LONG_DOUBLE)); |
454 | extern long int lrintl _PARAMS((_LONG_DOUBLE)); |
435 | extern _LONG_LONG_TYPE llrintl _PARAMS((_LONG_DOUBLE)); |
455 | extern _LONG_LONG_TYPE llrintl _PARAMS((_LONG_DOUBLE)); |
436 | #endif /* __i386__ */ |
456 | #endif /* __i386__ */ |
437 | #endif /* !_LDBL_EQ_DBL */ |
457 | #endif /* !_LDBL_EQ_DBL */ |
438 | 458 | ||
439 | #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L */ |
459 | #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L */ |
440 | 460 | ||
441 | #if !defined (__STRICT_ANSI__) || defined(__cplusplus) |
461 | #if !defined (__STRICT_ANSI__) || defined(__cplusplus) |
442 | 462 | ||
443 | extern double drem _PARAMS((double, double)); |
463 | extern double drem _PARAMS((double, double)); |
444 | extern void sincos _PARAMS((double, double *, double *)); |
464 | extern void sincos _PARAMS((double, double *, double *)); |
445 | extern double gamma_r _PARAMS((double, int *)); |
465 | extern double gamma_r _PARAMS((double, int *)); |
446 | extern double lgamma_r _PARAMS((double, int *)); |
466 | extern double lgamma_r _PARAMS((double, int *)); |
447 | 467 | ||
448 | extern double y0 _PARAMS((double)); |
468 | extern double y0 _PARAMS((double)); |
449 | extern double y1 _PARAMS((double)); |
469 | extern double y1 _PARAMS((double)); |
450 | extern double yn _PARAMS((int, double)); |
470 | extern double yn _PARAMS((int, double)); |
451 | extern double j0 _PARAMS((double)); |
471 | extern double j0 _PARAMS((double)); |
452 | extern double j1 _PARAMS((double)); |
472 | extern double j1 _PARAMS((double)); |
453 | extern double jn _PARAMS((int, double)); |
473 | extern double jn _PARAMS((int, double)); |
454 | 474 | ||
455 | extern float dremf _PARAMS((float, float)); |
475 | extern float dremf _PARAMS((float, float)); |
456 | extern void sincosf _PARAMS((float, float *, float *)); |
476 | extern void sincosf _PARAMS((float, float *, float *)); |
457 | extern float gammaf_r _PARAMS((float, int *)); |
477 | extern float gammaf_r _PARAMS((float, int *)); |
458 | extern float lgammaf_r _PARAMS((float, int *)); |
478 | extern float lgammaf_r _PARAMS((float, int *)); |
459 | 479 | ||
460 | extern float y0f _PARAMS((float)); |
480 | extern float y0f _PARAMS((float)); |
461 | extern float y1f _PARAMS((float)); |
481 | extern float y1f _PARAMS((float)); |
462 | extern float ynf _PARAMS((int, float)); |
482 | extern float ynf _PARAMS((int, float)); |
463 | extern float j0f _PARAMS((float)); |
483 | extern float j0f _PARAMS((float)); |
464 | extern float j1f _PARAMS((float)); |
484 | extern float j1f _PARAMS((float)); |
465 | extern float jnf _PARAMS((int, float)); |
485 | extern float jnf _PARAMS((int, float)); |
466 | 486 | ||
467 | /* GNU extensions */ |
487 | /* GNU extensions */ |
468 | # ifndef exp10 |
488 | # ifndef exp10 |
469 | extern double exp10 _PARAMS((double)); |
489 | extern double exp10 _PARAMS((double)); |
470 | # endif |
490 | # endif |
471 | # ifndef pow10 |
491 | # ifndef pow10 |
472 | extern double pow10 _PARAMS((double)); |
492 | extern double pow10 _PARAMS((double)); |
473 | # endif |
493 | # endif |
474 | # ifndef exp10f |
494 | # ifndef exp10f |
475 | extern float exp10f _PARAMS((float)); |
495 | extern float exp10f _PARAMS((float)); |
476 | # endif |
496 | # endif |
477 | # ifndef pow10f |
497 | # ifndef pow10f |
478 | extern float pow10f _PARAMS((float)); |
498 | extern float pow10f _PARAMS((float)); |
479 | # endif |
499 | # endif |
480 | 500 | ||
481 | #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) */ |
501 | #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) */ |
482 | 502 | ||
483 | #ifndef __STRICT_ANSI__ |
503 | #ifndef __STRICT_ANSI__ |
484 | 504 | ||
485 | /* The gamma functions use a global variable, signgam. */ |
505 | /* The gamma functions use a global variable, signgam. */ |
486 | #ifndef _REENT_ONLY |
506 | #ifndef _REENT_ONLY |
487 | #define signgam (*__signgam()) |
507 | #define signgam (*__signgam()) |
488 | extern int *__signgam _PARAMS((void)); |
508 | extern int *__signgam _PARAMS((void)); |
489 | #endif /* ! defined (_REENT_ONLY) */ |
509 | #endif /* ! defined (_REENT_ONLY) */ |
490 | 510 | ||
491 | #define __signgam_r(ptr) _REENT_SIGNGAM(ptr) |
511 | #define __signgam_r(ptr) _REENT_SIGNGAM(ptr) |
492 | 512 | ||
493 | /* The exception structure passed to the matherr routine. */ |
513 | /* The exception structure passed to the matherr routine. */ |
494 | /* We have a problem when using C++ since `exception' is a reserved |
514 | /* We have a problem when using C++ since `exception' is a reserved |
495 | name in C++. */ |
515 | name in C++. */ |
496 | #ifdef __cplusplus |
516 | #ifdef __cplusplus |
497 | struct __exception |
517 | struct __exception |
498 | #else |
518 | #else |
499 | struct exception |
519 | struct exception |
500 | #endif |
520 | #endif |
501 | { |
521 | { |
502 | int type; |
522 | int type; |
503 | char *name; |
523 | char *name; |
504 | double arg1; |
524 | double arg1; |
505 | double arg2; |
525 | double arg2; |
506 | double retval; |
526 | double retval; |
507 | int err; |
527 | int err; |
508 | }; |
528 | }; |
509 | 529 | ||
510 | #ifdef __cplusplus |
530 | #ifdef __cplusplus |
511 | extern int matherr _PARAMS((struct __exception *e)); |
531 | extern int matherr _PARAMS((struct __exception *e)); |
512 | #else |
532 | #else |
513 | extern int matherr _PARAMS((struct exception *e)); |
533 | extern int matherr _PARAMS((struct exception *e)); |
514 | #endif |
534 | #endif |
515 | 535 | ||
516 | /* Values for the type field of struct exception. */ |
536 | /* Values for the type field of struct exception. */ |
517 | 537 | ||
518 | #define DOMAIN 1 |
538 | #define DOMAIN 1 |
519 | #define SING 2 |
539 | #define SING 2 |
520 | #define OVERFLOW 3 |
540 | #define OVERFLOW 3 |
521 | #define UNDERFLOW 4 |
541 | #define UNDERFLOW 4 |
522 | #define TLOSS 5 |
542 | #define TLOSS 5 |
523 | #define PLOSS 6 |
543 | #define PLOSS 6 |
524 | 544 | ||
525 | /* Useful constants. */ |
545 | /* Useful constants. */ |
526 | 546 | ||
527 | #define MAXFLOAT 3.40282347e+38F |
547 | #define MAXFLOAT 3.40282347e+38F |
528 | 548 | ||
529 | #define M_E 2.7182818284590452354 |
549 | #define M_E 2.7182818284590452354 |
530 | #define M_LOG2E 1.4426950408889634074 |
550 | #define M_LOG2E 1.4426950408889634074 |
531 | #define M_LOG10E 0.43429448190325182765 |
551 | #define M_LOG10E 0.43429448190325182765 |
532 | #define M_LN2 _M_LN2 |
552 | #define M_LN2 _M_LN2 |
533 | #define M_LN10 2.30258509299404568402 |
553 | #define M_LN10 2.30258509299404568402 |
534 | #define M_PI 3.14159265358979323846 |
554 | #define M_PI 3.14159265358979323846 |
535 | #define M_TWOPI (M_PI * 2.0) |
555 | #define M_TWOPI (M_PI * 2.0) |
536 | #define M_PI_2 1.57079632679489661923 |
556 | #define M_PI_2 1.57079632679489661923 |
537 | #define M_PI_4 0.78539816339744830962 |
557 | #define M_PI_4 0.78539816339744830962 |
538 | #define M_3PI_4 2.3561944901923448370E0 |
558 | #define M_3PI_4 2.3561944901923448370E0 |
539 | #define M_SQRTPI 1.77245385090551602792981 |
559 | #define M_SQRTPI 1.77245385090551602792981 |
540 | #define M_1_PI 0.31830988618379067154 |
560 | #define M_1_PI 0.31830988618379067154 |
541 | #define M_2_PI 0.63661977236758134308 |
561 | #define M_2_PI 0.63661977236758134308 |
542 | #define M_2_SQRTPI 1.12837916709551257390 |
562 | #define M_2_SQRTPI 1.12837916709551257390 |
543 | #define M_SQRT2 1.41421356237309504880 |
563 | #define M_SQRT2 1.41421356237309504880 |
544 | #define M_SQRT1_2 0.70710678118654752440 |
564 | #define M_SQRT1_2 0.70710678118654752440 |
545 | #define M_LN2LO 1.9082149292705877000E-10 |
565 | #define M_LN2LO 1.9082149292705877000E-10 |
546 | #define M_LN2HI 6.9314718036912381649E-1 |
566 | #define M_LN2HI 6.9314718036912381649E-1 |
547 | #define M_SQRT3 1.73205080756887719000 |
567 | #define M_SQRT3 1.73205080756887719000 |
548 | #define M_IVLN10 0.43429448190325182765 /* 1 / log(10) */ |
568 | #define M_IVLN10 0.43429448190325182765 /* 1 / log(10) */ |
549 | #define M_LOG2_E _M_LN2 |
569 | #define M_LOG2_E _M_LN2 |
550 | #define M_INVLN2 1.4426950408889633870E0 /* 1 / log(2) */ |
570 | #define M_INVLN2 1.4426950408889633870E0 /* 1 / log(2) */ |
551 | 571 | ||
552 | /* Global control over fdlibm error handling. */ |
572 | /* Global control over fdlibm error handling. */ |
553 | 573 | ||
554 | enum __fdlibm_version |
574 | enum __fdlibm_version |
555 | { |
575 | { |
556 | __fdlibm_ieee = -1, |
576 | __fdlibm_ieee = -1, |
557 | __fdlibm_svid, |
577 | __fdlibm_svid, |
558 | __fdlibm_xopen, |
578 | __fdlibm_xopen, |
559 | __fdlibm_posix |
579 | __fdlibm_posix |
560 | }; |
580 | }; |
561 | 581 | ||
562 | #define _LIB_VERSION_TYPE enum __fdlibm_version |
582 | #define _LIB_VERSION_TYPE enum __fdlibm_version |
563 | #define _LIB_VERSION __fdlib_version |
583 | #define _LIB_VERSION __fdlib_version |
564 | 584 | ||
565 | extern __IMPORT _LIB_VERSION_TYPE _LIB_VERSION; |
585 | extern __IMPORT _LIB_VERSION_TYPE _LIB_VERSION; |
566 | 586 | ||
567 | #define _IEEE_ __fdlibm_ieee |
587 | #define _IEEE_ __fdlibm_ieee |
568 | #define _SVID_ __fdlibm_svid |
588 | #define _SVID_ __fdlibm_svid |
569 | #define _XOPEN_ __fdlibm_xopen |
589 | #define _XOPEN_ __fdlibm_xopen |
570 | #define _POSIX_ __fdlibm_posix |
590 | #define _POSIX_ __fdlibm_posix |
571 | 591 | ||
572 | #endif /* ! defined (__STRICT_ANSI__) */ |
592 | #endif /* ! defined (__STRICT_ANSI__) */ |
573 | 593 | ||
574 | _END_STD_C |
594 | _END_STD_C |
575 | 595 | ||
576 | #ifdef __FAST_MATH__ |
596 | #ifdef __FAST_MATH__ |
577 | #include |
597 | #include |
578 | #endif |
598 | #endif |
579 | 599 | ||
580 | #endif /* _MATH_H_ */>=>> |
600 | #endif /* _MATH_H_ */>=>> |