1    	/* Prototype declarations for math functions; helper file for <math.h>.
2    	   Copyright (C) 1996-2015 Free Software Foundation, Inc.
3    	   This file is part of the GNU C Library.
4    	
5    	   The GNU C Library is free software; you can redistribute it and/or
6    	   modify it under the terms of the GNU Lesser General Public
7    	   License as published by the Free Software Foundation; either
8    	   version 2.1 of the License, or (at your option) any later version.
9    	
10   	   The GNU C Library is distributed in the hope that it will be useful,
11   	   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   	   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   	   Lesser General Public License for more details.
14   	
15   	   You should have received a copy of the GNU Lesser General Public
16   	   License along with the GNU C Library; if not, see
17   	   <http://www.gnu.org/licenses/>.  */
18   	
19   	/* NOTE: Because of the special way this file is used by <math.h>, this
20   	   file must NOT be protected from multiple inclusion as header files
21   	   usually are.
22   	
23   	   This file provides prototype declarations for the math functions.
24   	   Most functions are declared using the macro:
25   	
26   	   __MATHCALL (NAME,[_r], (ARGS...));
27   	
28   	   This means there is a function `NAME' returning `double' and a function
29   	   `NAMEf' returning `float'.  Each place `_Mdouble_' appears in the
30   	   prototype, that is actually `double' in the prototype for `NAME' and
31   	   `float' in the prototype for `NAMEf'.  Reentrant variant functions are
32   	   called `NAME_r' and `NAMEf_r'.
33   	
34   	   Functions returning other types like `int' are declared using the macro:
35   	
36   	   __MATHDECL (TYPE, NAME,[_r], (ARGS...));
37   	
38   	   This is just like __MATHCALL but for a function returning `TYPE'
39   	   instead of `_Mdouble_'.  In all of these cases, there is still
40   	   both a `NAME' and a `NAMEf' that takes `float' arguments.
41   	
42   	   Note that there must be no whitespace before the argument passed for
43   	   NAME, to make token pasting work with -traditional.  */
44   	
45   	#ifndef _MATH_H
46   	# error "Never include <bits/mathcalls.h> directly; include <math.h> instead."
47   	#endif
48   	
49   	
50   	/* Trigonometric functions.  */
51   	
52   	_Mdouble_BEGIN_NAMESPACE
53   	/* Arc cosine of X.  */
54   	__MATHCALL (acos,, (_Mdouble_ __x));
55   	/* Arc sine of X.  */
56   	__MATHCALL (asin,, (_Mdouble_ __x));
57   	/* Arc tangent of X.  */
58   	__MATHCALL (atan,, (_Mdouble_ __x));
59   	/* Arc tangent of Y/X.  */
60   	__MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
61   	
62   	/* Cosine of X.  */
63   	__MATHCALL_VEC (cos,, (_Mdouble_ __x));
64   	/* Sine of X.  */
65   	__MATHCALL_VEC (sin,, (_Mdouble_ __x));
66   	/* Tangent of X.  */
67   	__MATHCALL (tan,, (_Mdouble_ __x));
68   	
69   	/* Hyperbolic functions.  */
70   	
71   	/* Hyperbolic cosine of X.  */
72   	__MATHCALL (cosh,, (_Mdouble_ __x));
73   	/* Hyperbolic sine of X.  */
74   	__MATHCALL (sinh,, (_Mdouble_ __x));
75   	/* Hyperbolic tangent of X.  */
76   	__MATHCALL (tanh,, (_Mdouble_ __x));
77   	_Mdouble_END_NAMESPACE
78   	
79   	#ifdef __USE_GNU
80   	/* Cosine and sine of X.  */
81   	__MATHDECL_VEC (void,sincos,,
82   			(_Mdouble_ __x, _Mdouble_ *__sinx, _Mdouble_ *__cosx));
83   	#endif
84   	
85   	#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
86   	__BEGIN_NAMESPACE_C99
87   	/* Hyperbolic arc cosine of X.  */
88   	__MATHCALL (acosh,, (_Mdouble_ __x));
89   	/* Hyperbolic arc sine of X.  */
90   	__MATHCALL (asinh,, (_Mdouble_ __x));
91   	/* Hyperbolic arc tangent of X.  */
92   	__MATHCALL (atanh,, (_Mdouble_ __x));
93   	__END_NAMESPACE_C99
94   	#endif
95   	
96   	/* Exponential and logarithmic functions.  */
97   	
98   	_Mdouble_BEGIN_NAMESPACE
99   	/* Exponential function of X.  */
100  	__MATHCALL_VEC (exp,, (_Mdouble_ __x));
101  	
102  	/* Break VALUE into a normalized fraction and an integral power of 2.  */
103  	__MATHCALL (frexp,, (_Mdouble_ __x, int *__exponent));
104  	
105  	/* X times (two to the EXP power).  */
106  	__MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent));
107  	
108  	/* Natural logarithm of X.  */
109  	__MATHCALL_VEC (log,, (_Mdouble_ __x));
110  	
111  	/* Base-ten logarithm of X.  */
112  	__MATHCALL (log10,, (_Mdouble_ __x));
113  	
114  	/* Break VALUE into integral and fractional parts.  */
115  	__MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2));
116  	_Mdouble_END_NAMESPACE
117  	
118  	#ifdef __USE_GNU
119  	/* A function missing in all standards: compute exponent to base ten.  */
120  	__MATHCALL (exp10,, (_Mdouble_ __x));
121  	/* Another name occasionally used.  */
122  	__MATHCALL (pow10,, (_Mdouble_ __x));
123  	#endif
124  	
125  	#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
126  	__BEGIN_NAMESPACE_C99
127  	/* Return exp(X) - 1.  */
128  	__MATHCALL (expm1,, (_Mdouble_ __x));
129  	
130  	/* Return log(1 + X).  */
131  	__MATHCALL (log1p,, (_Mdouble_ __x));
132  	
133  	/* Return the base 2 signed integral exponent of X.  */
134  	__MATHCALL (logb,, (_Mdouble_ __x));
135  	__END_NAMESPACE_C99
136  	#endif
137  	
138  	#ifdef __USE_ISOC99
139  	__BEGIN_NAMESPACE_C99
140  	/* Compute base-2 exponential of X.  */
141  	__MATHCALL (exp2,, (_Mdouble_ __x));
142  	
143  	/* Compute base-2 logarithm of X.  */
144  	__MATHCALL (log2,, (_Mdouble_ __x));
145  	__END_NAMESPACE_C99
146  	#endif
147  	
148  	
149  	/* Power functions.  */
150  	
151  	_Mdouble_BEGIN_NAMESPACE
152  	/* Return X to the Y power.  */
153  	__MATHCALL_VEC (pow,, (_Mdouble_ __x, _Mdouble_ __y));
154  	
155  	/* Return the square root of X.  */
156  	__MATHCALL (sqrt,, (_Mdouble_ __x));
157  	_Mdouble_END_NAMESPACE
158  	
159  	#if defined __USE_XOPEN || defined __USE_ISOC99
160  	__BEGIN_NAMESPACE_C99
161  	/* Return `sqrt(X*X + Y*Y)'.  */
162  	__MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
163  	__END_NAMESPACE_C99
164  	#endif
165  	
166  	#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
167  	__BEGIN_NAMESPACE_C99
168  	/* Return the cube root of X.  */
169  	__MATHCALL (cbrt,, (_Mdouble_ __x));
170  	__END_NAMESPACE_C99
171  	#endif
172  	
173  	
174  	/* Nearest integer, absolute value, and remainder functions.  */
175  	
176  	_Mdouble_BEGIN_NAMESPACE
177  	/* Smallest integral value not less than X.  */
178  	__MATHCALLX (ceil,, (_Mdouble_ __x), (__const__));
179  	
180  	/* Absolute value of X.  */
181  	__MATHCALLX (fabs,, (_Mdouble_ __x), (__const__));
182  	
183  	/* Largest integer not greater than X.  */
184  	__MATHCALLX (floor,, (_Mdouble_ __x), (__const__));
185  	
186  	/* Floating-point modulo remainder of X/Y.  */
187  	__MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
188  	
189  	
190  	/* Return 0 if VALUE is finite or NaN, +1 if it
191  	   is +Infinity, -1 if it is -Infinity.  */
192  	__MATHDECL_1 (int,__isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
193  	
194  	/* Return nonzero if VALUE is finite and not NaN.  */
195  	__MATHDECL_1 (int,__finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
196  	_Mdouble_END_NAMESPACE
197  	
198  	#ifdef __USE_MISC
199  	# if (!defined __cplusplus \
200  	      || __cplusplus < 201103L /* isinf conflicts with C++11.  */ \
201  	      || __MATH_DECLARING_DOUBLE == 0) /* isinff or isinfl don't.  */
202  	/* Return 0 if VALUE is finite or NaN, +1 if it
203  	   is +Infinity, -1 if it is -Infinity.  */
204  	__MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
205  	# endif
206  	
207  	/* Return nonzero if VALUE is finite and not NaN.  */
208  	__MATHDECL_1 (int,finite,, (_Mdouble_ __value)) __attribute__ ((__const__));
209  	
210  	/* Return the remainder of X/Y.  */
211  	__MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
212  	
213  	
214  	/* Return the fractional part of X after dividing out `ilogb (X)'.  */
215  	__MATHCALL (significand,, (_Mdouble_ __x));
216  	#endif /* Use misc.  */
217  	
218  	#ifdef __USE_ISOC99
219  	__BEGIN_NAMESPACE_C99
220  	/* Return X with its signed changed to Y's.  */
221  	__MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
222  	__END_NAMESPACE_C99
223  	#endif
224  	
225  	#ifdef __USE_ISOC99
226  	__BEGIN_NAMESPACE_C99
227  	/* Return representation of qNaN for double type.  */
228  	__MATHCALLX (nan,, (const char *__tagb), (__const__));
229  	__END_NAMESPACE_C99
230  	#endif
231  	
232  	
233  	/* Return nonzero if VALUE is not a number.  */
234  	__MATHDECL_1 (int,__isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
235  	
236  	#if defined __USE_MISC || defined __USE_XOPEN
237  	# if (!defined __cplusplus \
238  	      || __cplusplus < 201103L /* isnan conflicts with C++11.  */ \
239  	      || __MATH_DECLARING_DOUBLE == 0) /* isnanf or isnanl don't.  */
240  	/* Return nonzero if VALUE is not a number.  */
241  	__MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
242  	# endif
243  	
244  	/* Bessel functions.  */
245  	__MATHCALL (j0,, (_Mdouble_));
246  	__MATHCALL (j1,, (_Mdouble_));
247  	__MATHCALL (jn,, (int, _Mdouble_));
248  	__MATHCALL (y0,, (_Mdouble_));
249  	__MATHCALL (y1,, (_Mdouble_));
250  	__MATHCALL (yn,, (int, _Mdouble_));
251  	#endif
252  	
253  	
254  	#if defined __USE_XOPEN || defined __USE_ISOC99
255  	__BEGIN_NAMESPACE_C99
256  	/* Error and gamma functions.  */
257  	__MATHCALL (erf,, (_Mdouble_));
258  	__MATHCALL (erfc,, (_Mdouble_));
259  	__MATHCALL (lgamma,, (_Mdouble_));
260  	__END_NAMESPACE_C99
261  	#endif
262  	
263  	#ifdef __USE_ISOC99
264  	__BEGIN_NAMESPACE_C99
265  	/* True gamma function.  */
266  	__MATHCALL (tgamma,, (_Mdouble_));
267  	__END_NAMESPACE_C99
268  	#endif
269  	
270  	#if defined __USE_MISC || defined __USE_XOPEN
271  	/* Obsolete alias for `lgamma'.  */
272  	__MATHCALL (gamma,, (_Mdouble_));
273  	#endif
274  	
275  	#ifdef __USE_MISC
276  	/* Reentrant version of lgamma.  This function uses the global variable
277  	   `signgam'.  The reentrant version instead takes a pointer and stores
278  	   the value through it.  */
279  	__MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp));
280  	#endif
281  	
282  	
283  	#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
284  	__BEGIN_NAMESPACE_C99
285  	/* Return the integer nearest X in the direction of the
286  	   prevailing rounding mode.  */
287  	__MATHCALL (rint,, (_Mdouble_ __x));
288  	
289  	/* Return X + epsilon if X < Y, X - epsilon if X > Y.  */
290  	__MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
291  	# if defined __USE_ISOC99 && !defined __LDBL_COMPAT
292  	__MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
293  	# endif
294  	
295  	/* Return the remainder of integer divison X / Y with infinite precision.  */
296  	__MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
297  	
298  	# ifdef __USE_ISOC99
299  	/* Return X times (2 to the Nth power).  */
300  	__MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
301  	# endif
302  	
303  	/* Return the binary exponent of X, which must be nonzero.  */
304  	__MATHDECL (int,ilogb,, (_Mdouble_ __x));
305  	#endif
306  	
307  	#ifdef __USE_ISOC99
308  	/* Return X times (2 to the Nth power).  */
309  	__MATHCALL (scalbln,, (_Mdouble_ __x, long int __n));
310  	
311  	/* Round X to integral value in floating-point format using current
312  	   rounding direction, but do not raise inexact exception.  */
313  	__MATHCALL (nearbyint,, (_Mdouble_ __x));
314  	
315  	/* Round X to nearest integral value, rounding halfway cases away from
316  	   zero.  */
317  	__MATHCALLX (round,, (_Mdouble_ __x), (__const__));
318  	
319  	/* Round X to the integral value in floating-point format nearest but
320  	   not larger in magnitude.  */
321  	__MATHCALLX (trunc,, (_Mdouble_ __x), (__const__));
322  	
323  	/* Compute remainder of X and Y and put in *QUO a value with sign of x/y
324  	   and magnitude congruent `mod 2^n' to the magnitude of the integral
325  	   quotient x/y, with n >= 3.  */
326  	__MATHCALL (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo));
327  	
328  	
329  	/* Conversion functions.  */
330  	
331  	/* Round X to nearest integral value according to current rounding
332  	   direction.  */
333  	__MATHDECL (long int,lrint,, (_Mdouble_ __x));
334  	__extension__
335  	__MATHDECL (long long int,llrint,, (_Mdouble_ __x));
336  	
337  	/* Round X to nearest integral value, rounding halfway cases away from
338  	   zero.  */
339  	__MATHDECL (long int,lround,, (_Mdouble_ __x));
340  	__extension__
341  	__MATHDECL (long long int,llround,, (_Mdouble_ __x));
342  	
343  	
344  	/* Return positive difference between X and Y.  */
345  	__MATHCALL (fdim,, (_Mdouble_ __x, _Mdouble_ __y));
346  	
347  	/* Return maximum numeric value from X and Y.  */
348  	__MATHCALLX (fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
349  	
350  	/* Return minimum numeric value from X and Y.  */
351  	__MATHCALLX (fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
352  	
353  	
354  	/* Classify given number.  */
355  	__MATHDECL_1 (int, __fpclassify,, (_Mdouble_ __value))
356  	     __attribute__ ((__const__));
357  	
358  	/* Test for negative number.  */
359  	__MATHDECL_1 (int, __signbit,, (_Mdouble_ __value))
360  	     __attribute__ ((__const__));
361  	
362  	
363  	/* Multiply-add function computed as a ternary operation.  */
364  	__MATHCALL (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z));
365  	#endif /* Use ISO C99.  */
366  	
367  	#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
368  	__END_NAMESPACE_C99
369  	#endif
370  	
371  	#ifdef __USE_GNU
372  	/* Test for signaling NaN.  */
373  	__MATHDECL_1 (int, __issignaling,, (_Mdouble_ __value))
374  	     __attribute__ ((__const__));
375  	#endif
376  	
377  	#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
378  	/* Return X times (2 to the Nth power).  */
379  	__MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
380  	#endif
381