modernc.org/cc@v1.0.1/v2/headers/linux_amd64/usr/include/bits/mathcalls.h (about) 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 /* Trigonometric functions. */ 50 51 _Mdouble_BEGIN_NAMESPACE 52 /* Arc cosine of X. */ 53 __MATHCALL(acos,, (_Mdouble_ __x)); 54 /* Arc sine of X. */ 55 __MATHCALL(asin,, (_Mdouble_ __x)); 56 /* Arc tangent of X. */ 57 __MATHCALL(atan,, (_Mdouble_ __x)); 58 /* Arc tangent of Y/X. */ 59 __MATHCALL(atan2,, (_Mdouble_ __y, _Mdouble_ __x)); 60 61 /* Cosine of X. */ 62 __MATHCALL_VEC(cos,, (_Mdouble_ __x)); 63 /* Sine of X. */ 64 __MATHCALL_VEC(sin,, (_Mdouble_ __x)); 65 /* Tangent of X. */ 66 __MATHCALL(tan,, (_Mdouble_ __x)); 67 68 /* Hyperbolic functions. */ 69 70 /* Hyperbolic cosine of X. */ 71 __MATHCALL(cosh,, (_Mdouble_ __x)); 72 /* Hyperbolic sine of X. */ 73 __MATHCALL(sinh,, (_Mdouble_ __x)); 74 /* Hyperbolic tangent of X. */ 75 __MATHCALL(tanh,, (_Mdouble_ __x)); 76 _Mdouble_END_NAMESPACE 77 #ifdef __USE_GNU 78 /* Cosine and sine of X. */ 79 __MATHDECL_VEC(void, sincos,, (_Mdouble_ __x, _Mdouble_ * __sinx, _Mdouble_ * __cosx)); 80 #endif 81 82 #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 83 __BEGIN_NAMESPACE_C99 84 /* Hyperbolic arc cosine of X. */ 85 __MATHCALL(acosh,, (_Mdouble_ __x)); 86 /* Hyperbolic arc sine of X. */ 87 __MATHCALL(asinh,, (_Mdouble_ __x)); 88 /* Hyperbolic arc tangent of X. */ 89 __MATHCALL(atanh,, (_Mdouble_ __x)); 90 __END_NAMESPACE_C99 91 #endif 92 /* Exponential and logarithmic functions. */ 93 _Mdouble_BEGIN_NAMESPACE 94 /* Exponential function of X. */ 95 __MATHCALL_VEC(exp,, (_Mdouble_ __x)); 96 97 /* Break VALUE into a normalized fraction and an integral power of 2. */ 98 __MATHCALL(frexp,, (_Mdouble_ __x, int *__exponent)); 99 100 /* X times (two to the EXP power). */ 101 __MATHCALL(ldexp,, (_Mdouble_ __x, int __exponent)); 102 103 /* Natural logarithm of X. */ 104 __MATHCALL_VEC(log,, (_Mdouble_ __x)); 105 106 /* Base-ten logarithm of X. */ 107 __MATHCALL(log10,, (_Mdouble_ __x)); 108 109 /* Break VALUE into integral and fractional parts. */ 110 __MATHCALL(modf,, (_Mdouble_ __x, _Mdouble_ * __iptr)) __nonnull((2)); 111 _Mdouble_END_NAMESPACE 112 #ifdef __USE_GNU 113 /* A function missing in all standards: compute exponent to base ten. */ 114 __MATHCALL(exp10,, (_Mdouble_ __x)); 115 /* Another name occasionally used. */ 116 __MATHCALL(pow10,, (_Mdouble_ __x)); 117 #endif 118 119 #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 120 __BEGIN_NAMESPACE_C99 121 /* Return exp(X) - 1. */ 122 __MATHCALL(expm1,, (_Mdouble_ __x)); 123 124 /* Return log(1 + X). */ 125 __MATHCALL(log1p,, (_Mdouble_ __x)); 126 127 /* Return the base 2 signed integral exponent of X. */ 128 __MATHCALL(logb,, (_Mdouble_ __x)); 129 __END_NAMESPACE_C99 130 #endif 131 #ifdef __USE_ISOC99 132 __BEGIN_NAMESPACE_C99 133 /* Compute base-2 exponential of X. */ 134 __MATHCALL(exp2,, (_Mdouble_ __x)); 135 136 /* Compute base-2 logarithm of X. */ 137 __MATHCALL(log2,, (_Mdouble_ __x)); 138 __END_NAMESPACE_C99 139 #endif 140 /* Power functions. */ 141 _Mdouble_BEGIN_NAMESPACE 142 /* Return X to the Y power. */ 143 __MATHCALL_VEC(pow,, (_Mdouble_ __x, _Mdouble_ __y)); 144 145 /* Return the square root of X. */ 146 __MATHCALL(sqrt,, (_Mdouble_ __x)); 147 _Mdouble_END_NAMESPACE 148 #if defined __USE_XOPEN || defined __USE_ISOC99 149 __BEGIN_NAMESPACE_C99 150 /* Return `sqrt(X*X + Y*Y)'. */ 151 __MATHCALL(hypot,, (_Mdouble_ __x, _Mdouble_ __y)); 152 __END_NAMESPACE_C99 153 #endif 154 #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 155 __BEGIN_NAMESPACE_C99 156 /* Return the cube root of X. */ 157 __MATHCALL(cbrt,, (_Mdouble_ __x)); 158 __END_NAMESPACE_C99 159 #endif 160 /* Nearest integer, absolute value, and remainder functions. */ 161 _Mdouble_BEGIN_NAMESPACE 162 /* Smallest integral value not less than X. */ 163 __MATHCALLX(ceil,, (_Mdouble_ __x), (__const__)); 164 165 /* Absolute value of X. */ 166 __MATHCALLX(fabs,, (_Mdouble_ __x), (__const__)); 167 168 /* Largest integer not greater than X. */ 169 __MATHCALLX(floor,, (_Mdouble_ __x), (__const__)); 170 171 /* Floating-point modulo remainder of X/Y. */ 172 __MATHCALL(fmod,, (_Mdouble_ __x, _Mdouble_ __y)); 173 174 /* Return 0 if VALUE is finite or NaN, +1 if it 175 is +Infinity, -1 if it is -Infinity. */ 176 __MATHDECL_1(int, __isinf,, (_Mdouble_ __value)) __attribute__ ((__const__)); 177 178 /* Return nonzero if VALUE is finite and not NaN. */ 179 __MATHDECL_1(int, __finite,, (_Mdouble_ __value)) __attribute__ ((__const__)); 180 _Mdouble_END_NAMESPACE 181 #ifdef __USE_MISC 182 # if (!defined __cplusplus \ 183 || __cplusplus < 201103L /* isinf conflicts with C++11. */ \ 184 || __MATH_DECLARING_DOUBLE == 0) /* isinff or isinfl don't. */ 185 /* Return 0 if VALUE is finite or NaN, +1 if it 186 is +Infinity, -1 if it is -Infinity. */ 187 __MATHDECL_1(int, isinf,, (_Mdouble_ __value)) __attribute__ ((__const__)); 188 # endif 189 190 /* Return nonzero if VALUE is finite and not NaN. */ 191 __MATHDECL_1(int, finite,, (_Mdouble_ __value)) __attribute__ ((__const__)); 192 193 /* Return the remainder of X/Y. */ 194 __MATHCALL(drem,, (_Mdouble_ __x, _Mdouble_ __y)); 195 196 /* Return the fractional part of X after dividing out `ilogb (X)'. */ 197 __MATHCALL(significand,, (_Mdouble_ __x)); 198 #endif /* Use misc. */ 199 200 #ifdef __USE_ISOC99 201 __BEGIN_NAMESPACE_C99 202 /* Return X with its signed changed to Y's. */ 203 __MATHCALLX(copysign,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); 204 __END_NAMESPACE_C99 205 #endif 206 #ifdef __USE_ISOC99 207 __BEGIN_NAMESPACE_C99 208 /* Return representation of qNaN for double type. */ 209 __MATHCALLX(nan,, (const char *__tagb), (__const__)); 210 __END_NAMESPACE_C99 211 #endif 212 /* Return nonzero if VALUE is not a number. */ 213 __MATHDECL_1(int, __isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); 214 215 #if defined __USE_MISC || defined __USE_XOPEN 216 # if (!defined __cplusplus \ 217 || __cplusplus < 201103L /* isnan conflicts with C++11. */ \ 218 || __MATH_DECLARING_DOUBLE == 0) /* isnanf or isnanl don't. */ 219 /* Return nonzero if VALUE is not a number. */ 220 __MATHDECL_1(int, isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); 221 # endif 222 223 /* Bessel functions. */ 224 __MATHCALL(j0,, (_Mdouble_)); 225 __MATHCALL(j1,, (_Mdouble_)); 226 __MATHCALL(jn,, (int, _Mdouble_)); 227 __MATHCALL(y0,, (_Mdouble_)); 228 __MATHCALL(y1,, (_Mdouble_)); 229 __MATHCALL(yn,, (int, _Mdouble_)); 230 #endif 231 232 #if defined __USE_XOPEN || defined __USE_ISOC99 233 __BEGIN_NAMESPACE_C99 234 /* Error and gamma functions. */ 235 __MATHCALL(erf,, (_Mdouble_)); 236 __MATHCALL(erfc,, (_Mdouble_)); 237 __MATHCALL(lgamma,, (_Mdouble_)); 238 __END_NAMESPACE_C99 239 #endif 240 #ifdef __USE_ISOC99 241 __BEGIN_NAMESPACE_C99 242 /* True gamma function. */ 243 __MATHCALL(tgamma,, (_Mdouble_)); 244 __END_NAMESPACE_C99 245 #endif 246 #if defined __USE_MISC || defined __USE_XOPEN 247 /* Obsolete alias for `lgamma'. */ 248 __MATHCALL(gamma,, (_Mdouble_)); 249 #endif 250 251 #ifdef __USE_MISC 252 /* Reentrant version of lgamma. This function uses the global variable 253 `signgam'. The reentrant version instead takes a pointer and stores 254 the value through it. */ 255 __MATHCALL(lgamma, _r, (_Mdouble_, int *__signgamp)); 256 #endif 257 258 #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 259 __BEGIN_NAMESPACE_C99 260 /* Return the integer nearest X in the direction of the 261 prevailing rounding mode. */ 262 __MATHCALL(rint,, (_Mdouble_ __x)); 263 264 /* Return X + epsilon if X < Y, X - epsilon if X > Y. */ 265 __MATHCALLX(nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); 266 # if defined __USE_ISOC99 && !defined __LDBL_COMPAT 267 __MATHCALLX(nexttoward,, (_Mdouble_ __x, long double __y), (__const__)); 268 # endif 269 270 /* Return the remainder of integer divison X / Y with infinite precision. */ 271 __MATHCALL(remainder,, (_Mdouble_ __x, _Mdouble_ __y)); 272 273 # ifdef __USE_ISOC99 274 /* Return X times (2 to the Nth power). */ 275 __MATHCALL(scalbn,, (_Mdouble_ __x, int __n)); 276 # endif 277 278 /* Return the binary exponent of X, which must be nonzero. */ 279 __MATHDECL(int, ilogb,, (_Mdouble_ __x)); 280 #endif 281 282 #ifdef __USE_ISOC99 283 /* Return X times (2 to the Nth power). */ 284 __MATHCALL(scalbln,, (_Mdouble_ __x, long int __n)); 285 286 /* Round X to integral value in floating-point format using current 287 rounding direction, but do not raise inexact exception. */ 288 __MATHCALL(nearbyint,, (_Mdouble_ __x)); 289 290 /* Round X to nearest integral value, rounding halfway cases away from 291 zero. */ 292 __MATHCALLX(round,, (_Mdouble_ __x), (__const__)); 293 294 /* Round X to the integral value in floating-point format nearest but 295 not larger in magnitude. */ 296 __MATHCALLX(trunc,, (_Mdouble_ __x), (__const__)); 297 298 /* Compute remainder of X and Y and put in *QUO a value with sign of x/y 299 and magnitude congruent `mod 2^n' to the magnitude of the integral 300 quotient x/y, with n >= 3. */ 301 __MATHCALL(remquo,, (_Mdouble_ __x, _Mdouble_ __y, int *__quo)); 302 303 /* Conversion functions. */ 304 305 /* Round X to nearest integral value according to current rounding 306 direction. */ 307 __MATHDECL(long int, lrint,, (_Mdouble_ __x)); 308 __extension__ __MATHDECL(long long int, llrint,, (_Mdouble_ __x)); 309 310 /* Round X to nearest integral value, rounding halfway cases away from 311 zero. */ 312 __MATHDECL(long int, lround,, (_Mdouble_ __x)); 313 __extension__ __MATHDECL(long long int, llround,, (_Mdouble_ __x)); 314 315 /* Return positive difference between X and Y. */ 316 __MATHCALL(fdim,, (_Mdouble_ __x, _Mdouble_ __y)); 317 318 /* Return maximum numeric value from X and Y. */ 319 __MATHCALLX(fmax,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); 320 321 /* Return minimum numeric value from X and Y. */ 322 __MATHCALLX(fmin,, (_Mdouble_ __x, _Mdouble_ __y), (__const__)); 323 324 /* Classify given number. */ 325 __MATHDECL_1(int, __fpclassify,, (_Mdouble_ __value)) 326 __attribute__ ((__const__)); 327 328 /* Test for negative number. */ 329 __MATHDECL_1(int, __signbit,, (_Mdouble_ __value)) 330 __attribute__ ((__const__)); 331 332 /* Multiply-add function computed as a ternary operation. */ 333 __MATHCALL(fma,, (_Mdouble_ __x, _Mdouble_ __y, _Mdouble_ __z)); 334 #endif /* Use ISO C99. */ 335 336 #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 337 __END_NAMESPACE_C99 338 #endif 339 #ifdef __USE_GNU 340 /* Test for signaling NaN. */ 341 __MATHDECL_1(int, __issignaling,, (_Mdouble_ __value)) 342 __attribute__ ((__const__)); 343 #endif 344 345 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED 346 /* Return X times (2 to the Nth power). */ 347 __MATHCALL(scalb,, (_Mdouble_ __x, _Mdouble_ __n)); 348 #endif