1 /* Prototype declarations for math functions; helper file for <math.h>. 2 Copyright (C) 1996-2002, 2003, 2006 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 /* __MATHCALLX(type,function,[suffix],args,attrib) and 51 * __MATHCALLI(type,function,[suffix],args) include libm_hidden_proto 52 * (for "double" versions only, xxxf and xxxl do not get this treatment). 53 * 54 * __MATHDECL(type,function,[suffix],args) does not. 55 * __MATHCALL(function,[suffix],args) also does not 56 * (it is just a shortcut to __MATHDECL(_Mdouble_,function,[suffix],args)). 57 * 58 * __MATHDECL_PRIV(type,function,[suffix],args,attrib) 59 * includes libm_hidden_proto (always) and declares __foo, not foo. 60 */ 61 62 63 /* Trigonometric functions. */ 64 65 _Mdouble_BEGIN_NAMESPACE 66 /* Arc cosine of X. */ 67 __MATHCALLI (acos,, (_Mdouble_ __x)) 68 /* Arc sine of X. */ 69 __MATHCALLI (asin,, (_Mdouble_ __x)) 70 /* Arc tangent of X. */ 71 __MATHCALLI (atan,, (_Mdouble_ __x)) 72 /* Arc tangent of Y/X. */ 73 __MATHCALLI (atan2,, (_Mdouble_ __y, _Mdouble_ __x)) 74 75 /* Cosine of X. */ 76 __MATHCALLI (cos,, (_Mdouble_ __x)) 77 # if defined _LIBC && defined _Mlong_double_ 78 libm_hidden_proto(cosl) 79 # endif 80 # if defined _LIBC && defined _Mfloat_ 81 libm_hidden_proto(cosf) 82 # endif 83 84 /* Sine of X. */ 85 __MATHCALLI (sin,, (_Mdouble_ __x)) 86 # if defined _LIBC && defined _Mlong_double_ 87 libm_hidden_proto(sinl) 88 # endif 89 # if defined _LIBC && defined _Mfloat_ 90 libm_hidden_proto(sinf) 91 # endif 92 93 /* Tangent of X. */ 94 __MATHCALLI (tan,, (_Mdouble_ __x)) 95 96 /* Hyperbolic functions. */ 97 98 /* Hyperbolic cosine of X. */ 99 __MATHCALLI (cosh,, (_Mdouble_ __x)) 100 /* Hyperbolic sine of X. */ 101 __MATHCALLI (sinh,, (_Mdouble_ __x)) 102 /* Hyperbolic tangent of X. */ 103 __MATHCALLI (tanh,, (_Mdouble_ __x)) 104 _Mdouble_END_NAMESPACE 105 106 #if defined __USE_GNU 107 /* Cosine and sine of X. */ 108 __MATHDECL (void,sincos,, 109 (_Mdouble_ __x, _Mdouble_ *__sinx, _Mdouble_ *__cosx)) 110 #endif 111 112 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 113 __BEGIN_NAMESPACE_C99 114 /* Hyperbolic arc cosine of X. */ 115 __MATHCALLI (acosh,, (_Mdouble_ __x)) 116 /* Hyperbolic arc sine of X. */ 117 __MATHCALLI (asinh,, (_Mdouble_ __x)) 118 /* Hyperbolic arc tangent of X. */ 119 __MATHCALLI (atanh,, (_Mdouble_ __x)) 120 __END_NAMESPACE_C99 121 #endif 122 123 /* Exponential and logarithmic functions. */ 124 125 _Mdouble_BEGIN_NAMESPACE 126 /* Exponential function of X. */ 127 __MATHCALLI (exp,, (_Mdouble_ __x)) 128 # if defined _LIBC && defined _Mlong_double_ 129 libm_hidden_proto(expl) 130 # endif 131 132 /* Break VALUE into a normalized fraction and an integral power of 2. */ 133 __MATHCALLI (frexp,, (_Mdouble_ __x, int *__exponent)) 134 135 /* X times (two to the EXP power). */ 136 __MATHCALLI (ldexp,, (_Mdouble_ __x, int __exponent)) 137 138 /* Natural logarithm of X. */ 139 __MATHCALLI (log,, (_Mdouble_ __x)) 140 141 /* Base-ten logarithm of X. */ 142 __MATHCALLI (log10,, (_Mdouble_ __x)) 143 144 /* Break VALUE into integral and fractional parts. */ 145 __MATHCALLI (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) 146 _Mdouble_END_NAMESPACE 147 148 #if defined __USE_GNU 149 /* A function missing in all standards: compute exponent to base ten. */ 150 __MATHCALLI (exp10,, (_Mdouble_ __x)) 151 /* Another name occasionally used. */ 152 __MATHCALLI (pow10,, (_Mdouble_ __x)) 153 #endif 154 155 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 156 __BEGIN_NAMESPACE_C99 157 /* Return exp(X) - 1. */ 158 __MATHCALLI (expm1,, (_Mdouble_ __x)) 159 160 /* Return log(1 + X). */ 161 __MATHCALLI (log1p,, (_Mdouble_ __x)) 162 163 /* Return the base 2 signed integral exponent of X. */ 164 __MATHCALLI (logb,, (_Mdouble_ __x)) 165 __END_NAMESPACE_C99 166 #endif 167 168 #ifdef __USE_ISOC99 169 __BEGIN_NAMESPACE_C99 170 /* Compute base-2 exponential of X. */ 171 __MATHCALLI (exp2,, (_Mdouble_ __x)) 172 173 /* Compute base-2 logarithm of X. */ 174 __MATHCALLI (log2,, (_Mdouble_ __x)) 175 __END_NAMESPACE_C99 176 #endif 177 178 179 /* Power functions. */ 180 181 _Mdouble_BEGIN_NAMESPACE 182 /* Return X to the Y power. */ 183 __MATHCALLI (pow,, (_Mdouble_ __x, _Mdouble_ __y)) 184 185 /* Return the square root of X. */ 186 __MATHCALLI (sqrt,, (_Mdouble_ __x)) 187 _Mdouble_END_NAMESPACE 188 189 #if defined __USE_MISC || defined __USE_XOPEN || defined __USE_ISOC99 190 __BEGIN_NAMESPACE_C99 191 /* Return `sqrt(X*X + Y*Y)'. */ 192 __MATHCALLI (hypot,, (_Mdouble_ __x, _Mdouble_ __y)) 193 # if defined _LIBC && defined _Mlong_double_ 194 libm_hidden_proto(hypotl) 195 # endif 196 __END_NAMESPACE_C99 197 #endif 198 199 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 200 __BEGIN_NAMESPACE_C99 201 /* Return the cube root of X. */ 202 __MATHCALLI (cbrt,, (_Mdouble_ __x)) 203 __END_NAMESPACE_C99 204 #endif 205 206 207 /* Nearest integer, absolute value, and remainder functions. */ 208 209 _Mdouble_BEGIN_NAMESPACE 210 /* Smallest integral value not less than X. */ 211 __MATHCALLX (ceil,, (_Mdouble_ __x), (__const__)) 212 213 /* Absolute value of X. */ 214 __MATHCALLX (fabs,, (_Mdouble_ __x), (__const__)) 215 216 /* Largest integer not greater than X. */ 217 __MATHCALLX (floor,, (_Mdouble_ __x), (__const__)) 218 219 /* Floating-point modulo remainder of X/Y. */ 220 __MATHCALLI (fmod,, (_Mdouble_ __x, _Mdouble_ __y)) 221 222 223 /* Return 0 if VALUE is finite or NaN, +1 if it 224 is +Infinity, -1 if it is -Infinity. */ 225 __MATHDECL_PRIV (int,isinf,, (_Mdouble_ __value), (__const__)) 226 227 /* Return nonzero if VALUE is finite and not NaN. */ 228 __MATHDECL_PRIV (int,finite,, (_Mdouble_ __value), (__const__)) 229 _Mdouble_END_NAMESPACE 230 231 #ifdef __USE_MISC 232 #if 0 233 /* Return 0 if VALUE is finite or NaN, +1 if it 234 is +Infinity, -1 if it is -Infinity. */ 235 __MATHDECL_PRIV (int,isinf,, (_Mdouble_ __value), (__const__)) 236 237 /* Return nonzero if VALUE is finite and not NaN. */ 238 __MATHDECL_PRIV (int,finite,, (_Mdouble_ __value), (__const__)) 239 #endif 240 /* Return the remainder of X/Y. */ 241 __MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y)) 242 243 244 /* Return the fractional part of X after dividing out `ilogb (X)'. */ 245 __MATHCALLI (significand,, (_Mdouble_ __x)) 246 #endif /* Use misc. */ 247 248 #if defined __USE_MISC || defined __USE_ISOC99 249 __BEGIN_NAMESPACE_C99 250 /* Return X with its signed changed to Y's. */ 251 __MATHCALLX (copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)) 252 __END_NAMESPACE_C99 253 #endif 254 255 #ifdef __USE_ISOC99 256 __BEGIN_NAMESPACE_C99 257 /* Return representation of NaN for double type. */ 258 __MATHCALLX (nan,, (const char *__tagb), (__const__)) 259 __END_NAMESPACE_C99 260 #endif 261 262 #if defined __USE_MISC || defined __USE_XOPEN || defined __USE_ISOC99 263 /* Return nonzero if VALUE is not a number. */ 264 __BEGIN_NAMESPACE_C99 265 __MATHDECL_PRIV (int,isnan,, (_Mdouble_ __value), (__const__)) 266 __END_NAMESPACE_C99 267 #endif 268 269 #if defined __USE_MISC || defined __USE_XOPEN 270 # ifdef __DO_XSI_MATH__ 271 /* Bessel functions. */ 272 __MATHCALL (j0,, (_Mdouble_)) 273 __MATHCALL (j1,, (_Mdouble_)) 274 __MATHCALL (jn,, (int, _Mdouble_)) 275 __MATHCALL (y0,, (_Mdouble_)) 276 __MATHCALL (y1,, (_Mdouble_)) 277 __MATHCALL (yn,, (int, _Mdouble_)) 278 # endif 279 #endif 280 281 282 #if defined __USE_MISC || defined __USE_XOPEN || defined __USE_ISOC99 283 __BEGIN_NAMESPACE_C99 284 /* Error and gamma functions. */ 285 __MATHCALLI (erf,, (_Mdouble_)) 286 __MATHCALLI (erfc,, (_Mdouble_)) 287 __MATHCALLI (lgamma,, (_Mdouble_)) 288 __END_NAMESPACE_C99 289 #endif 290 291 #ifdef __USE_ISOC99 292 __BEGIN_NAMESPACE_C99 293 /* True gamma function. */ 294 __MATHCALLI (tgamma,, (_Mdouble_)) 295 __END_NAMESPACE_C99 296 #endif 297 298 #if defined __USE_MISC || defined __USE_XOPEN 299 /* Obsolete alias for `lgamma'. */ 300 __MATHCALLI (gamma,, (_Mdouble_)) 301 #endif 302 303 //#ifdef __USE_MISC 304 /* To provide compatibility with finite-math-only in C99 and C11 305 * standerts function lgamma_r should be declared, when defined __USE_MISC. 306 */ 307 /* Reentrant version of lgamma. This function uses the global variable 308 `signgam'. The reentrant version instead takes a pointer and stores 309 the value through it. */ 310 __MATHCALL (lgamma,_r, (_Mdouble_, int *__signgamp)) 311 /* __MATHCALLI does not work here, probably due to ,_r, */ 312 libm_hidden_proto(lgamma_r) 313 //#endif 314 315 316 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 317 __BEGIN_NAMESPACE_C99 318 /* Return the integer nearest X in the direction of the 319 prevailing rounding mode. */ 320 __MATHCALLI (rint,, (_Mdouble_ __x)) 321 322 /* Return X + epsilon if X < Y, X - epsilon if X > Y. */ 323 __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)) 324 # if defined _LIBC && defined _Mlong_double_ 325 libm_hidden_proto(nextafterl) 326 # endif 327 # if defined __USE_ISOC99 && !defined __LDBL_COMPAT 328 __MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__)) 329 # endif 330 331 /* Return the remainder of integer divison X / Y with infinite precision. */ 332 __MATHCALLI (remainder,, (_Mdouble_ __x, _Mdouble_ __y)) 333 334 # if defined __USE_MISC || defined __USE_ISOC99 335 /* Return X times (2 to the Nth power). */ 336 __MATHCALLI (scalbn,, (_Mdouble_ __x, int __n)) 337 # endif 338 339 /* Return the binary exponent of X, which must be nonzero. */ 340 __MATHDECLI (int,ilogb,, (_Mdouble_ __x)) 341 #endif 342 343 #ifdef __USE_ISOC99 344 /* Return X times (2 to the Nth power). */ 345 __MATHCALLI (scalbln,, (_Mdouble_ __x, long int __n)) 346 347 /* Round X to integral value in floating-point format using current 348 rounding direction, but do not raise inexact exception. */ 349 __MATHCALLI (nearbyint,, (_Mdouble_ __x)) 350 351 /* Round X to nearest integral value, rounding halfway cases away from 352 zero. */ 353 __MATHCALLX (round,, (_Mdouble_ __x), (__const__)) 354 355 /* Round X to the integral value in floating-point format nearest but 356 not larger in magnitude. */ 357 __MATHCALLX (trunc,, (_Mdouble_ __x), (__const__)) 358 359 /* Compute remainder of X and Y and put in *QUO a value with sign of x/y 360 and magnitude congruent `mod 2^n' to the magnitude of the integral 361 quotient x/y, with n >= 3. */ 362 __MATHCALLI (remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo)) 363 364 365 /* Conversion functions. */ 366 367 /* Round X to nearest integral value according to current rounding 368 direction. */ 369 __MATHDECLI (long int,lrint,, (_Mdouble_ __x)) 370 __MATHDECLI (long long int,llrint,, (_Mdouble_ __x)) 371 372 /* Round X to nearest integral value, rounding halfway cases away from 373 zero. */ 374 __MATHDECLI (long int,lround,, (_Mdouble_ __x)) 375 __MATHDECLI (long long int,llround,, (_Mdouble_ __x)) 376 377 378 /* Return positive difference between X and Y. */ 379 __MATHCALLI (fdim,, (_Mdouble_ __x, _Mdouble_ __y)) 380 381 /* Return maximum numeric value from X and Y. */ 382 __MATHCALLI (fmax,, (_Mdouble_ __x, _Mdouble_ __y)) 383 384 /* Return minimum numeric value from X and Y. */ 385 __MATHCALLI (fmin,, (_Mdouble_ __x, _Mdouble_ __y)) 386 387 388 /* Classify given number. */ 389 __MATHDECL_PRIV (int, fpclassify,, (_Mdouble_ __value), (__const__)) 390 391 /* Test for negative number. */ 392 __MATHDECL_PRIV (int, signbit,, (_Mdouble_ __value), (__const__)) 393 394 395 /* Multiply-add function computed as a ternary operation. */ 396 __MATHCALLI (fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z)) 397 #endif /* Use ISO C99. */ 398 399 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 400 __END_NAMESPACE_C99 401 #endif 402 403 #if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) \ 404 && defined __UCLIBC_SUSV3_LEGACY__ 405 /* Return X times (2 to the Nth power). */ 406 __MATHCALLI (scalb,, (_Mdouble_ __x, _Mdouble_ __n)) 407 #endif 408