| /* |
| * Copyright (C) 2017 The Android Open Source Project |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in |
| * the documentation and/or other materials provided with the |
| * distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
| * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
| * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
| * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS |
| * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
| * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| * SUCH DAMAGE. |
| */ |
| |
| #include <math.h> |
| |
| #include "header_checks.h" |
| |
| static void math_h() { |
| TYPE(float_t); |
| TYPE(double_t); |
| |
| #if !defined(fpclassify) |
| #error fpclassify |
| #endif |
| #if !defined(isfinite) |
| #error isfinite |
| #endif |
| #if !defined(isgreater) |
| #error isgreater |
| #endif |
| #if !defined(isgreaterequal) |
| #error isgreaterequal |
| #endif |
| #if !defined(isinf) |
| #error isinf |
| #endif |
| #if !defined(isless) |
| #error isless |
| #endif |
| #if !defined(islessequal) |
| #error islessequal |
| #endif |
| #if !defined(islessgreater) |
| #error islessgreater |
| #endif |
| #if !defined(isnan) |
| #error isnan |
| #endif |
| #if !defined(isnormal) |
| #error isnormal |
| #endif |
| #if !defined(isunordered) |
| #error isunordered |
| #endif |
| #if !defined(signbit) |
| #error signbit |
| #endif |
| |
| MACRO(M_E); |
| MACRO(M_LOG2E); |
| MACRO(M_LOG10E); |
| MACRO(M_LN2); |
| MACRO(M_LN10); |
| MACRO(M_PI); |
| MACRO(M_PI_2); |
| MACRO(M_PI_4); |
| MACRO(M_1_PI); |
| MACRO(M_2_PI); |
| MACRO(M_2_SQRTPI); |
| MACRO(M_SQRT2); |
| MACRO(M_SQRT1_2); |
| |
| MACRO(MAXFLOAT); |
| |
| MACRO(HUGE_VAL); |
| MACRO(HUGE_VALF); |
| MACRO(HUGE_VALL); |
| MACRO(INFINITY); |
| MACRO(NAN); |
| |
| MACRO(FP_INFINITE); |
| MACRO(FP_NAN); |
| MACRO(FP_NORMAL); |
| MACRO(FP_SUBNORMAL); |
| MACRO(FP_ZERO); |
| |
| #if defined(FP_FAST_FMA) && FP_FAST_FMA != 1 |
| #error FP_FAST_FMA |
| #endif |
| #if defined(FP_FAST_FMAF) && FP_FAST_FMAF != 1 |
| #error FP_FAST_FMAF |
| #endif |
| #if defined(FP_FAST_FMAL) && FP_FAST_FMAL != 1 |
| #error FP_FAST_FMAL |
| #endif |
| |
| MACRO(FP_ILOGB0); |
| MACRO(FP_ILOGBNAN); |
| |
| MACRO_VALUE(MATH_ERRNO, 1); |
| MACRO_VALUE(MATH_ERREXCEPT, 2); |
| |
| #if !defined(math_errhandling) |
| #error math_errhandling |
| #endif |
| MACRO_TYPE(int, math_errhandling); |
| |
| FUNCTION(acos, double (*f)(double)); |
| FUNCTION(acosf, float (*f)(float)); |
| FUNCTION(acosh, double (*f)(double)); |
| FUNCTION(acoshf, float (*f)(float)); |
| FUNCTION(acoshl, long double (*f)(long double)); |
| FUNCTION(acosl, long double (*f)(long double)); |
| |
| FUNCTION(asin, double (*f)(double)); |
| FUNCTION(asinf, float (*f)(float)); |
| FUNCTION(asinh, double (*f)(double)); |
| FUNCTION(asinhf, float (*f)(float)); |
| FUNCTION(asinhl, long double (*f)(long double)); |
| FUNCTION(asinl, long double (*f)(long double)); |
| |
| FUNCTION(atan, double (*f)(double)); |
| FUNCTION(atan2, double (*f)(double, double)); |
| FUNCTION(atan2f, float (*f)(float, float)); |
| FUNCTION(atan2l, long double (*f)(long double, long double)); |
| FUNCTION(atanf, float (*f)(float)); |
| FUNCTION(atanh, double (*f)(double)); |
| FUNCTION(atanhf, float (*f)(float)); |
| FUNCTION(atanhl, long double (*f)(long double)); |
| FUNCTION(atanl, long double (*f)(long double)); |
| |
| FUNCTION(cbrt, double (*f)(double)); |
| FUNCTION(cbrtf, float (*f)(float)); |
| FUNCTION(cbrtl, long double (*f)(long double)); |
| |
| FUNCTION(ceil, double (*f)(double)); |
| FUNCTION(ceilf, float (*f)(float)); |
| FUNCTION(ceill, long double (*f)(long double)); |
| |
| FUNCTION(copysign, double (*f)(double, double)); |
| FUNCTION(copysignf, float (*f)(float, float)); |
| FUNCTION(copysignl, long double (*f)(long double, long double)); |
| |
| FUNCTION(cos, double (*f)(double)); |
| FUNCTION(cosf, float (*f)(float)); |
| FUNCTION(cosh, double (*f)(double)); |
| FUNCTION(coshf, float (*f)(float)); |
| FUNCTION(coshl, long double (*f)(long double)); |
| FUNCTION(cosl, long double (*f)(long double)); |
| |
| FUNCTION(erf, double (*f)(double)); |
| FUNCTION(erfc, double (*f)(double)); |
| FUNCTION(erfcf, float (*f)(float)); |
| FUNCTION(erfcl, long double (*f)(long double)); |
| FUNCTION(erff, float (*f)(float)); |
| FUNCTION(erfl, long double (*f)(long double)); |
| |
| FUNCTION(exp, double (*f)(double)); |
| FUNCTION(exp2, double (*f)(double)); |
| FUNCTION(exp2f, float (*f)(float)); |
| FUNCTION(exp2l, long double (*f)(long double)); |
| FUNCTION(expf, float (*f)(float)); |
| FUNCTION(expl, long double (*f)(long double)); |
| FUNCTION(expm1, double (*f)(double)); |
| FUNCTION(expm1f, float (*f)(float)); |
| FUNCTION(expm1l, long double (*f)(long double)); |
| |
| FUNCTION(fabs, double (*f)(double)); |
| FUNCTION(fabsf, float (*f)(float)); |
| FUNCTION(fabsl, long double (*f)(long double)); |
| |
| FUNCTION(fdim, double (*f)(double, double)); |
| FUNCTION(fdimf, float (*f)(float, float)); |
| FUNCTION(fdiml, long double (*f)(long double, long double)); |
| |
| FUNCTION(floor, double (*f)(double)); |
| FUNCTION(floorf, float (*f)(float)); |
| FUNCTION(floorl, long double (*f)(long double)); |
| |
| FUNCTION(fma, double (*f)(double, double, double)); |
| FUNCTION(fmaf, float (*f)(float, float, float)); |
| FUNCTION(fmal, long double (*f)(long double, long double, long double)); |
| |
| FUNCTION(fmax, double (*f)(double, double)); |
| FUNCTION(fmaxf, float (*f)(float, float)); |
| FUNCTION(fmaxl, long double (*f)(long double, long double)); |
| |
| FUNCTION(fmin, double (*f)(double, double)); |
| FUNCTION(fminf, float (*f)(float, float)); |
| FUNCTION(fminl, long double (*f)(long double, long double)); |
| |
| FUNCTION(fmod, double (*f)(double, double)); |
| FUNCTION(fmodf, float (*f)(float, float)); |
| FUNCTION(fmodl, long double (*f)(long double, long double)); |
| |
| FUNCTION(frexp, double (*f)(double, int*)); |
| FUNCTION(frexpf, float (*f)(float, int*)); |
| FUNCTION(frexpl, long double (*f)(long double, int*)); |
| |
| FUNCTION(hypot, double (*f)(double, double)); |
| FUNCTION(hypotf, float (*f)(float, float)); |
| FUNCTION(hypotl, long double (*f)(long double, long double)); |
| |
| FUNCTION(ilogb, int (*f)(double)); |
| FUNCTION(ilogbf, int (*f)(float)); |
| FUNCTION(ilogbl, int (*f)(long double)); |
| |
| FUNCTION(j0, double (*f)(double)); |
| FUNCTION(j1, double (*f)(double)); |
| FUNCTION(jn, double (*f)(int, double)); |
| |
| FUNCTION(ldexp, double (*f)(double, int)); |
| FUNCTION(ldexpf, float (*f)(float, int)); |
| FUNCTION(ldexpl, long double (*f)(long double, int)); |
| |
| FUNCTION(lgamma, double (*f)(double)); |
| FUNCTION(lgammaf, float (*f)(float)); |
| FUNCTION(lgammal, long double (*f)(long double)); |
| |
| FUNCTION(llrint, long long (*f)(double)); |
| FUNCTION(llrintf, long long (*f)(float)); |
| FUNCTION(llrintl, long long (*f)(long double)); |
| |
| FUNCTION(llround, long long (*f)(double)); |
| FUNCTION(llroundf, long long (*f)(float)); |
| FUNCTION(llroundl, long long (*f)(long double)); |
| |
| FUNCTION(log, double (*f)(double)); |
| FUNCTION(log10, double (*f)(double)); |
| FUNCTION(log10f, float (*f)(float)); |
| FUNCTION(log10l, long double (*f)(long double)); |
| FUNCTION(log1p, double (*f)(double)); |
| FUNCTION(log1pf, float (*f)(float)); |
| FUNCTION(log1pl, long double (*f)(long double)); |
| FUNCTION(log2, double (*f)(double)); |
| FUNCTION(log2f, float (*f)(float)); |
| FUNCTION(log2l, long double (*f)(long double)); |
| FUNCTION(logb, double (*f)(double)); |
| FUNCTION(logbf, float (*f)(float)); |
| FUNCTION(logbl, long double (*f)(long double)); |
| FUNCTION(logf, float (*f)(float)); |
| FUNCTION(logl, long double (*f)(long double)); |
| |
| FUNCTION(lrint, long (*f)(double)); |
| FUNCTION(lrintf, long (*f)(float)); |
| FUNCTION(lrintl, long (*f)(long double)); |
| |
| FUNCTION(lround, long (*f)(double)); |
| FUNCTION(lroundf, long (*f)(float)); |
| FUNCTION(lroundl, long (*f)(long double)); |
| |
| FUNCTION(modf, double (*f)(double, double*)); |
| FUNCTION(modff, float (*f)(float, float*)); |
| FUNCTION(modfl, long double (*f)(long double, long double*)); |
| |
| FUNCTION(nan, double (*f)(const char*)); |
| FUNCTION(nanf, float (*f)(const char*)); |
| FUNCTION(nanl, long double (*f)(const char*)); |
| |
| FUNCTION(nearbyint, double (*f)(double)); |
| FUNCTION(nearbyintf, float (*f)(float)); |
| FUNCTION(nearbyintl, long double (*f)(long double)); |
| |
| FUNCTION(nextafter, double (*f)(double, double)); |
| FUNCTION(nextafterf, float (*f)(float, float)); |
| FUNCTION(nextafterl, long double (*f)(long double, long double)); |
| |
| FUNCTION(nexttoward, double (*f)(double, long double)); |
| FUNCTION(nexttowardf, float (*f)(float, long double)); |
| FUNCTION(nexttowardl, long double (*f)(long double, long double)); |
| |
| FUNCTION(pow, double (*f)(double, double)); |
| FUNCTION(powf, float (*f)(float, float)); |
| FUNCTION(powl, long double (*f)(long double, long double)); |
| |
| FUNCTION(remainder, double (*f)(double, double)); |
| FUNCTION(remainderf, float (*f)(float, float)); |
| FUNCTION(remainderl, long double (*f)(long double, long double)); |
| |
| FUNCTION(remquo, double (*f)(double, double, int*)); |
| FUNCTION(remquof, float (*f)(float, float, int*)); |
| FUNCTION(remquol, long double (*f)(long double, long double, int*)); |
| |
| FUNCTION(rint, double (*f)(double)); |
| FUNCTION(rintf, float (*f)(float)); |
| FUNCTION(rintl, long double (*f)(long double)); |
| |
| FUNCTION(round, double (*f)(double)); |
| FUNCTION(roundf, float (*f)(float)); |
| FUNCTION(roundl, long double (*f)(long double)); |
| |
| FUNCTION(scalbln, double (*f)(double, long)); |
| FUNCTION(scalblnf, float (*f)(float, long)); |
| FUNCTION(scalblnl, long double (*f)(long double, long)); |
| |
| FUNCTION(scalbn, double (*f)(double, int)); |
| FUNCTION(scalbnf, float (*f)(float, int)); |
| FUNCTION(scalbnl, long double (*f)(long double, int)); |
| |
| FUNCTION(sin, double (*f)(double)); |
| FUNCTION(sinf, float (*f)(float)); |
| FUNCTION(sinh, double (*f)(double)); |
| FUNCTION(sinhf, float (*f)(float)); |
| FUNCTION(sinhl, long double (*f)(long double)); |
| FUNCTION(sinl, long double (*f)(long double)); |
| |
| FUNCTION(sqrt, double (*f)(double)); |
| FUNCTION(sqrtf, float (*f)(float)); |
| FUNCTION(sqrtl, long double (*f)(long double)); |
| |
| FUNCTION(tan, double (*f)(double)); |
| FUNCTION(tanf, float (*f)(float)); |
| FUNCTION(tanh, double (*f)(double)); |
| FUNCTION(tanhf, float (*f)(float)); |
| FUNCTION(tanhl, long double (*f)(long double)); |
| FUNCTION(tanl, long double (*f)(long double)); |
| |
| FUNCTION(tgamma, double (*f)(double)); |
| FUNCTION(tgammaf, float (*f)(float)); |
| FUNCTION(tgammal, long double (*f)(long double)); |
| |
| FUNCTION(trunc, double (*f)(double)); |
| FUNCTION(truncf, float (*f)(float)); |
| FUNCTION(truncl, long double (*f)(long double)); |
| |
| FUNCTION(y0, double (*f)(double)); |
| FUNCTION(y1, double (*f)(double)); |
| FUNCTION(yn, double (*f)(int, double)); |
| |
| int s = signgam; |
| } |