xref: /freebsd-12.1/contrib/libc++/include/cmath (revision b5893f02)
17a984708SDavid Chisnall// -*- C++ -*-
27a984708SDavid Chisnall//===---------------------------- cmath -----------------------------------===//
37a984708SDavid Chisnall//
47a984708SDavid Chisnall//                     The LLVM Compiler Infrastructure
57a984708SDavid Chisnall//
67a984708SDavid Chisnall// This file is dual licensed under the MIT and the University of Illinois Open
77a984708SDavid Chisnall// Source Licenses. See LICENSE.TXT for details.
87a984708SDavid Chisnall//
97a984708SDavid Chisnall//===----------------------------------------------------------------------===//
107a984708SDavid Chisnall
117a984708SDavid Chisnall#ifndef _LIBCPP_CMATH
127a984708SDavid Chisnall#define _LIBCPP_CMATH
137a984708SDavid Chisnall
147a984708SDavid Chisnall/*
157a984708SDavid Chisnall    cmath synopsis
167a984708SDavid Chisnall
177a984708SDavid ChisnallMacros:
187a984708SDavid Chisnall
197a984708SDavid Chisnall    HUGE_VAL
207a984708SDavid Chisnall    HUGE_VALF               // C99
217a984708SDavid Chisnall    HUGE_VALL               // C99
227a984708SDavid Chisnall    INFINITY                // C99
237a984708SDavid Chisnall    NAN                     // C99
247a984708SDavid Chisnall    FP_INFINITE             // C99
257a984708SDavid Chisnall    FP_NAN                  // C99
267a984708SDavid Chisnall    FP_NORMAL               // C99
277a984708SDavid Chisnall    FP_SUBNORMAL            // C99
287a984708SDavid Chisnall    FP_ZERO                 // C99
297a984708SDavid Chisnall    FP_FAST_FMA             // C99
307a984708SDavid Chisnall    FP_FAST_FMAF            // C99
317a984708SDavid Chisnall    FP_FAST_FMAL            // C99
327a984708SDavid Chisnall    FP_ILOGB0               // C99
337a984708SDavid Chisnall    FP_ILOGBNAN             // C99
347a984708SDavid Chisnall    MATH_ERRNO              // C99
357a984708SDavid Chisnall    MATH_ERREXCEPT          // C99
367a984708SDavid Chisnall    math_errhandling        // C99
377a984708SDavid Chisnall
387a984708SDavid Chisnallnamespace std
397a984708SDavid Chisnall{
407a984708SDavid Chisnall
417a984708SDavid ChisnallTypes:
427a984708SDavid Chisnall
437a984708SDavid Chisnall    float_t                 // C99
447a984708SDavid Chisnall    double_t                // C99
457a984708SDavid Chisnall
467a984708SDavid Chisnall// C90
477a984708SDavid Chisnall
487a984708SDavid Chisnallfloating_point abs(floating_point x);
497a984708SDavid Chisnall
507a984708SDavid Chisnallfloating_point acos (arithmetic x);
517a984708SDavid Chisnallfloat          acosf(float x);
527a984708SDavid Chisnalllong double    acosl(long double x);
537a984708SDavid Chisnall
547a984708SDavid Chisnallfloating_point asin (arithmetic x);
557a984708SDavid Chisnallfloat          asinf(float x);
567a984708SDavid Chisnalllong double    asinl(long double x);
577a984708SDavid Chisnall
587a984708SDavid Chisnallfloating_point atan (arithmetic x);
597a984708SDavid Chisnallfloat          atanf(float x);
607a984708SDavid Chisnalllong double    atanl(long double x);
617a984708SDavid Chisnall
627a984708SDavid Chisnallfloating_point atan2 (arithmetic y, arithmetic x);
637a984708SDavid Chisnallfloat          atan2f(float y, float x);
647a984708SDavid Chisnalllong double    atan2l(long double y, long double x);
657a984708SDavid Chisnall
667a984708SDavid Chisnallfloating_point ceil (arithmetic x);
677a984708SDavid Chisnallfloat          ceilf(float x);
687a984708SDavid Chisnalllong double    ceill(long double x);
697a984708SDavid Chisnall
707a984708SDavid Chisnallfloating_point cos (arithmetic x);
717a984708SDavid Chisnallfloat          cosf(float x);
727a984708SDavid Chisnalllong double    cosl(long double x);
737a984708SDavid Chisnall
747a984708SDavid Chisnallfloating_point cosh (arithmetic x);
757a984708SDavid Chisnallfloat          coshf(float x);
767a984708SDavid Chisnalllong double    coshl(long double x);
777a984708SDavid Chisnall
787a984708SDavid Chisnallfloating_point exp (arithmetic x);
797a984708SDavid Chisnallfloat          expf(float x);
807a984708SDavid Chisnalllong double    expl(long double x);
817a984708SDavid Chisnall
827a984708SDavid Chisnallfloating_point fabs (arithmetic x);
837a984708SDavid Chisnallfloat          fabsf(float x);
847a984708SDavid Chisnalllong double    fabsl(long double x);
857a984708SDavid Chisnall
867a984708SDavid Chisnallfloating_point floor (arithmetic x);
877a984708SDavid Chisnallfloat          floorf(float x);
887a984708SDavid Chisnalllong double    floorl(long double x);
897a984708SDavid Chisnall
907a984708SDavid Chisnallfloating_point fmod (arithmetic x, arithmetic y);
917a984708SDavid Chisnallfloat          fmodf(float x, float y);
927a984708SDavid Chisnalllong double    fmodl(long double x, long double y);
937a984708SDavid Chisnall
947a984708SDavid Chisnallfloating_point frexp (arithmetic value, int* exp);
957a984708SDavid Chisnallfloat          frexpf(float value, int* exp);
967a984708SDavid Chisnalllong double    frexpl(long double value, int* exp);
977a984708SDavid Chisnall
987a984708SDavid Chisnallfloating_point ldexp (arithmetic value, int exp);
997a984708SDavid Chisnallfloat          ldexpf(float value, int exp);
1007a984708SDavid Chisnalllong double    ldexpl(long double value, int exp);
1017a984708SDavid Chisnall
1027a984708SDavid Chisnallfloating_point log (arithmetic x);
1037a984708SDavid Chisnallfloat          logf(float x);
1047a984708SDavid Chisnalllong double    logl(long double x);
1057a984708SDavid Chisnall
1067a984708SDavid Chisnallfloating_point log10 (arithmetic x);
1077a984708SDavid Chisnallfloat          log10f(float x);
1087a984708SDavid Chisnalllong double    log10l(long double x);
1097a984708SDavid Chisnall
1107a984708SDavid Chisnallfloating_point modf (floating_point value, floating_point* iptr);
1117a984708SDavid Chisnallfloat          modff(float value, float* iptr);
1127a984708SDavid Chisnalllong double    modfl(long double value, long double* iptr);
1137a984708SDavid Chisnall
1147a984708SDavid Chisnallfloating_point pow (arithmetic x, arithmetic y);
1157a984708SDavid Chisnallfloat          powf(float x, float y);
1167a984708SDavid Chisnalllong double    powl(long double x, long double y);
1177a984708SDavid Chisnall
1187a984708SDavid Chisnallfloating_point sin (arithmetic x);
1197a984708SDavid Chisnallfloat          sinf(float x);
1207a984708SDavid Chisnalllong double    sinl(long double x);
1217a984708SDavid Chisnall
1227a984708SDavid Chisnallfloating_point sinh (arithmetic x);
1237a984708SDavid Chisnallfloat          sinhf(float x);
1247a984708SDavid Chisnalllong double    sinhl(long double x);
1257a984708SDavid Chisnall
1267a984708SDavid Chisnallfloating_point sqrt (arithmetic x);
1277a984708SDavid Chisnallfloat          sqrtf(float x);
1287a984708SDavid Chisnalllong double    sqrtl(long double x);
1297a984708SDavid Chisnall
1307a984708SDavid Chisnallfloating_point tan (arithmetic x);
1317a984708SDavid Chisnallfloat          tanf(float x);
1327a984708SDavid Chisnalllong double    tanl(long double x);
1337a984708SDavid Chisnall
1347a984708SDavid Chisnallfloating_point tanh (arithmetic x);
1357a984708SDavid Chisnallfloat          tanhf(float x);
1367a984708SDavid Chisnalllong double    tanhl(long double x);
1377a984708SDavid Chisnall
1387a984708SDavid Chisnall//  C99
1397a984708SDavid Chisnall
140cfdf2879SDavid Chisnallbool signbit(arithmetic x);
1417a984708SDavid Chisnall
142cfdf2879SDavid Chisnallint fpclassify(arithmetic x);
1437a984708SDavid Chisnall
144cfdf2879SDavid Chisnallbool isfinite(arithmetic x);
145cfdf2879SDavid Chisnallbool isinf(arithmetic x);
146cfdf2879SDavid Chisnallbool isnan(arithmetic x);
147cfdf2879SDavid Chisnallbool isnormal(arithmetic x);
1487a984708SDavid Chisnall
149cfdf2879SDavid Chisnallbool isgreater(arithmetic x, arithmetic y);
150cfdf2879SDavid Chisnallbool isgreaterequal(arithmetic x, arithmetic y);
151cfdf2879SDavid Chisnallbool isless(arithmetic x, arithmetic y);
152cfdf2879SDavid Chisnallbool islessequal(arithmetic x, arithmetic y);
153cfdf2879SDavid Chisnallbool islessgreater(arithmetic x, arithmetic y);
154cfdf2879SDavid Chisnallbool isunordered(arithmetic x, arithmetic y);
1557a984708SDavid Chisnall
1567a984708SDavid Chisnallfloating_point acosh (arithmetic x);
1577a984708SDavid Chisnallfloat          acoshf(float x);
1587a984708SDavid Chisnalllong double    acoshl(long double x);
1597a984708SDavid Chisnall
1607a984708SDavid Chisnallfloating_point asinh (arithmetic x);
1617a984708SDavid Chisnallfloat          asinhf(float x);
1627a984708SDavid Chisnalllong double    asinhl(long double x);
1637a984708SDavid Chisnall
1647a984708SDavid Chisnallfloating_point atanh (arithmetic x);
1657a984708SDavid Chisnallfloat          atanhf(float x);
1667a984708SDavid Chisnalllong double    atanhl(long double x);
1677a984708SDavid Chisnall
1687a984708SDavid Chisnallfloating_point cbrt (arithmetic x);
1697a984708SDavid Chisnallfloat          cbrtf(float x);
1707a984708SDavid Chisnalllong double    cbrtl(long double x);
1717a984708SDavid Chisnall
1727a984708SDavid Chisnallfloating_point copysign (arithmetic x, arithmetic y);
1737a984708SDavid Chisnallfloat          copysignf(float x, float y);
1747a984708SDavid Chisnalllong double    copysignl(long double x, long double y);
1757a984708SDavid Chisnall
1767a984708SDavid Chisnallfloating_point erf (arithmetic x);
1777a984708SDavid Chisnallfloat          erff(float x);
1787a984708SDavid Chisnalllong double    erfl(long double x);
1797a984708SDavid Chisnall
1807a984708SDavid Chisnallfloating_point erfc (arithmetic x);
1817a984708SDavid Chisnallfloat          erfcf(float x);
1827a984708SDavid Chisnalllong double    erfcl(long double x);
1837a984708SDavid Chisnall
1847a984708SDavid Chisnallfloating_point exp2 (arithmetic x);
1857a984708SDavid Chisnallfloat          exp2f(float x);
1867a984708SDavid Chisnalllong double    exp2l(long double x);
1877a984708SDavid Chisnall
1887a984708SDavid Chisnallfloating_point expm1 (arithmetic x);
1897a984708SDavid Chisnallfloat          expm1f(float x);
1907a984708SDavid Chisnalllong double    expm1l(long double x);
1917a984708SDavid Chisnall
1927a984708SDavid Chisnallfloating_point fdim (arithmetic x, arithmetic y);
1937a984708SDavid Chisnallfloat          fdimf(float x, float y);
1947a984708SDavid Chisnalllong double    fdiml(long double x, long double y);
1957a984708SDavid Chisnall
1967a984708SDavid Chisnallfloating_point fma (arithmetic x, arithmetic y, arithmetic z);
1977a984708SDavid Chisnallfloat          fmaf(float x, float y, float z);
1987a984708SDavid Chisnalllong double    fmal(long double x, long double y, long double z);
1997a984708SDavid Chisnall
2007a984708SDavid Chisnallfloating_point fmax (arithmetic x, arithmetic y);
2017a984708SDavid Chisnallfloat          fmaxf(float x, float y);
2027a984708SDavid Chisnalllong double    fmaxl(long double x, long double y);
2037a984708SDavid Chisnall
2047a984708SDavid Chisnallfloating_point fmin (arithmetic x, arithmetic y);
2057a984708SDavid Chisnallfloat          fminf(float x, float y);
2067a984708SDavid Chisnalllong double    fminl(long double x, long double y);
2077a984708SDavid Chisnall
2087a984708SDavid Chisnallfloating_point hypot (arithmetic x, arithmetic y);
2097a984708SDavid Chisnallfloat          hypotf(float x, float y);
2107a984708SDavid Chisnalllong double    hypotl(long double x, long double y);
2117a984708SDavid Chisnall
2127c82a1ecSDimitry Andricdouble       hypot(double x, double y, double z);                // C++17
2137c82a1ecSDimitry Andricfloat        hypot(float x, float y, float z);                   // C++17
2147c82a1ecSDimitry Andriclong double  hypot(long double x, long double y, long double z); // C++17
2157c82a1ecSDimitry Andric
2167a984708SDavid Chisnallint ilogb (arithmetic x);
2177a984708SDavid Chisnallint ilogbf(float x);
2187a984708SDavid Chisnallint ilogbl(long double x);
2197a984708SDavid Chisnall
2207a984708SDavid Chisnallfloating_point lgamma (arithmetic x);
2217a984708SDavid Chisnallfloat          lgammaf(float x);
2227a984708SDavid Chisnalllong double    lgammal(long double x);
2237a984708SDavid Chisnall
2247a984708SDavid Chisnalllong long llrint (arithmetic x);
2257a984708SDavid Chisnalllong long llrintf(float x);
2267a984708SDavid Chisnalllong long llrintl(long double x);
2277a984708SDavid Chisnall
2287a984708SDavid Chisnalllong long llround (arithmetic x);
2297a984708SDavid Chisnalllong long llroundf(float x);
2307a984708SDavid Chisnalllong long llroundl(long double x);
2317a984708SDavid Chisnall
2327a984708SDavid Chisnallfloating_point log1p (arithmetic x);
2337a984708SDavid Chisnallfloat          log1pf(float x);
2347a984708SDavid Chisnalllong double    log1pl(long double x);
2357a984708SDavid Chisnall
2367a984708SDavid Chisnallfloating_point log2 (arithmetic x);
2377a984708SDavid Chisnallfloat          log2f(float x);
2387a984708SDavid Chisnalllong double    log2l(long double x);
2397a984708SDavid Chisnall
2407a984708SDavid Chisnallfloating_point logb (arithmetic x);
2417a984708SDavid Chisnallfloat          logbf(float x);
2427a984708SDavid Chisnalllong double    logbl(long double x);
2437a984708SDavid Chisnall
2447a984708SDavid Chisnalllong lrint (arithmetic x);
2457a984708SDavid Chisnalllong lrintf(float x);
2467a984708SDavid Chisnalllong lrintl(long double x);
2477a984708SDavid Chisnall
2487a984708SDavid Chisnalllong lround (arithmetic x);
2497a984708SDavid Chisnalllong lroundf(float x);
2507a984708SDavid Chisnalllong lroundl(long double x);
2517a984708SDavid Chisnall
2527a984708SDavid Chisnalldouble      nan (const char* str);
2537a984708SDavid Chisnallfloat       nanf(const char* str);
2547a984708SDavid Chisnalllong double nanl(const char* str);
2557a984708SDavid Chisnall
2567a984708SDavid Chisnallfloating_point nearbyint (arithmetic x);
2577a984708SDavid Chisnallfloat          nearbyintf(float x);
2587a984708SDavid Chisnalllong double    nearbyintl(long double x);
2597a984708SDavid Chisnall
2607a984708SDavid Chisnallfloating_point nextafter (arithmetic x, arithmetic y);
2617a984708SDavid Chisnallfloat          nextafterf(float x, float y);
2627a984708SDavid Chisnalllong double    nextafterl(long double x, long double y);
2637a984708SDavid Chisnall
2647a984708SDavid Chisnallfloating_point nexttoward (arithmetic x, long double y);
2657a984708SDavid Chisnallfloat          nexttowardf(float x, long double y);
2667a984708SDavid Chisnalllong double    nexttowardl(long double x, long double y);
2677a984708SDavid Chisnall
2687a984708SDavid Chisnallfloating_point remainder (arithmetic x, arithmetic y);
2697a984708SDavid Chisnallfloat          remainderf(float x, float y);
2707a984708SDavid Chisnalllong double    remainderl(long double x, long double y);
2717a984708SDavid Chisnall
2727a984708SDavid Chisnallfloating_point remquo (arithmetic x, arithmetic y, int* pquo);
2737a984708SDavid Chisnallfloat          remquof(float x, float y, int* pquo);
2747a984708SDavid Chisnalllong double    remquol(long double x, long double y, int* pquo);
2757a984708SDavid Chisnall
2767a984708SDavid Chisnallfloating_point rint (arithmetic x);
2777a984708SDavid Chisnallfloat          rintf(float x);
2787a984708SDavid Chisnalllong double    rintl(long double x);
2797a984708SDavid Chisnall
2807a984708SDavid Chisnallfloating_point round (arithmetic x);
2817a984708SDavid Chisnallfloat          roundf(float x);
2827a984708SDavid Chisnalllong double    roundl(long double x);
2837a984708SDavid Chisnall
2847a984708SDavid Chisnallfloating_point scalbln (arithmetic x, long ex);
2857a984708SDavid Chisnallfloat          scalblnf(float x, long ex);
2867a984708SDavid Chisnalllong double    scalblnl(long double x, long ex);
2877a984708SDavid Chisnall
2887a984708SDavid Chisnallfloating_point scalbn (arithmetic x, int ex);
2897a984708SDavid Chisnallfloat          scalbnf(float x, int ex);
2907a984708SDavid Chisnalllong double    scalbnl(long double x, int ex);
2917a984708SDavid Chisnall
2927a984708SDavid Chisnallfloating_point tgamma (arithmetic x);
2937a984708SDavid Chisnallfloat          tgammaf(float x);
2947a984708SDavid Chisnalllong double    tgammal(long double x);
2957a984708SDavid Chisnall
2967a984708SDavid Chisnallfloating_point trunc (arithmetic x);
2977a984708SDavid Chisnallfloat          truncf(float x);
2987a984708SDavid Chisnalllong double    truncl(long double x);
2997a984708SDavid Chisnall
3007a984708SDavid Chisnall}  // std
3017a984708SDavid Chisnall
3027a984708SDavid Chisnall*/
3037a984708SDavid Chisnall
3047a984708SDavid Chisnall#include <__config>
3057a984708SDavid Chisnall#include <math.h>
306*b5893f02SDimitry Andric#include <version>
3077a984708SDavid Chisnall
3087a984708SDavid Chisnall#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
3097a984708SDavid Chisnall#pragma GCC system_header
3107a984708SDavid Chisnall#endif
3117a984708SDavid Chisnall
3127a984708SDavid Chisnall_LIBCPP_BEGIN_NAMESPACE_STD
3137a984708SDavid Chisnall
3147a984708SDavid Chisnallusing ::signbit;
3157a984708SDavid Chisnallusing ::fpclassify;
3167a984708SDavid Chisnallusing ::isfinite;
3177a984708SDavid Chisnallusing ::isinf;
3187a984708SDavid Chisnallusing ::isnan;
3197a984708SDavid Chisnallusing ::isnormal;
3207a984708SDavid Chisnallusing ::isgreater;
3217a984708SDavid Chisnallusing ::isgreaterequal;
3227a984708SDavid Chisnallusing ::isless;
3237a984708SDavid Chisnallusing ::islessequal;
3247a984708SDavid Chisnallusing ::islessgreater;
3257a984708SDavid Chisnallusing ::isunordered;
3267a984708SDavid Chisnallusing ::isunordered;
3277a984708SDavid Chisnall
3287a984708SDavid Chisnallusing ::float_t;
3297a984708SDavid Chisnallusing ::double_t;
3307a984708SDavid Chisnall
3319729cf09SDimitry Andric#ifndef _AIX
332854fa44bSDimitry Andricusing ::abs;
333854fa44bSDimitry Andric#endif
334854fa44bSDimitry Andric
3357a984708SDavid Chisnallusing ::acos;
3367a984708SDavid Chisnallusing ::acosf;
3377a984708SDavid Chisnallusing ::asin;
3387a984708SDavid Chisnallusing ::asinf;
3397a984708SDavid Chisnallusing ::atan;
3407a984708SDavid Chisnallusing ::atanf;
3417a984708SDavid Chisnallusing ::atan2;
3427a984708SDavid Chisnallusing ::atan2f;
3437a984708SDavid Chisnallusing ::ceil;
3447a984708SDavid Chisnallusing ::ceilf;
3457a984708SDavid Chisnallusing ::cos;
3467a984708SDavid Chisnallusing ::cosf;
3477a984708SDavid Chisnallusing ::cosh;
3487a984708SDavid Chisnallusing ::coshf;
3497a984708SDavid Chisnall
3507a984708SDavid Chisnallusing ::exp;
3517a984708SDavid Chisnallusing ::expf;
3527a984708SDavid Chisnall
3537a984708SDavid Chisnallusing ::fabs;
3547a984708SDavid Chisnallusing ::fabsf;
3557a984708SDavid Chisnallusing ::floor;
3567a984708SDavid Chisnallusing ::floorf;
3579729cf09SDimitry Andric
3587a984708SDavid Chisnallusing ::fmod;
3597a984708SDavid Chisnallusing ::fmodf;
3609729cf09SDimitry Andric
3617a984708SDavid Chisnallusing ::frexp;
3627a984708SDavid Chisnallusing ::frexpf;
3637a984708SDavid Chisnallusing ::ldexp;
3647a984708SDavid Chisnallusing ::ldexpf;
3659729cf09SDimitry Andric
3667a984708SDavid Chisnallusing ::log;
3677a984708SDavid Chisnallusing ::logf;
3689729cf09SDimitry Andric
3697a984708SDavid Chisnallusing ::log10;
3707a984708SDavid Chisnallusing ::log10f;
3717a984708SDavid Chisnallusing ::modf;
3727a984708SDavid Chisnallusing ::modff;
3739729cf09SDimitry Andric
3747a984708SDavid Chisnallusing ::pow;
3757a984708SDavid Chisnallusing ::powf;
3767a984708SDavid Chisnall
3777a984708SDavid Chisnallusing ::sin;
3787a984708SDavid Chisnallusing ::sinf;
3797a984708SDavid Chisnallusing ::sinh;
3807a984708SDavid Chisnallusing ::sinhf;
3819729cf09SDimitry Andric
3827a984708SDavid Chisnallusing ::sqrt;
3837a984708SDavid Chisnallusing ::sqrtf;
3847a984708SDavid Chisnallusing ::tan;
3857a984708SDavid Chisnallusing ::tanf;
3869729cf09SDimitry Andric
3877a984708SDavid Chisnallusing ::tanh;
3887a984708SDavid Chisnallusing ::tanhf;
3897a984708SDavid Chisnall
3907a984708SDavid Chisnallusing ::acosh;
3917a984708SDavid Chisnallusing ::acoshf;
3927a984708SDavid Chisnallusing ::asinh;
3937a984708SDavid Chisnallusing ::asinhf;
3947a984708SDavid Chisnallusing ::atanh;
3957a984708SDavid Chisnallusing ::atanhf;
3967a984708SDavid Chisnallusing ::cbrt;
3977a984708SDavid Chisnallusing ::cbrtf;
3987a984708SDavid Chisnall
3997a984708SDavid Chisnallusing ::copysign;
4007a984708SDavid Chisnallusing ::copysignf;
4017a984708SDavid Chisnall
4027a984708SDavid Chisnallusing ::erf;
4037a984708SDavid Chisnallusing ::erff;
4047a984708SDavid Chisnallusing ::erfc;
4057a984708SDavid Chisnallusing ::erfcf;
4067a984708SDavid Chisnallusing ::exp2;
4077a984708SDavid Chisnallusing ::exp2f;
4087a984708SDavid Chisnallusing ::expm1;
4097a984708SDavid Chisnallusing ::expm1f;
4107a984708SDavid Chisnallusing ::fdim;
4117a984708SDavid Chisnallusing ::fdimf;
412d72607e9SDimitry Andricusing ::fmaf;
4137a984708SDavid Chisnallusing ::fma;
4147a984708SDavid Chisnallusing ::fmax;
4157a984708SDavid Chisnallusing ::fmaxf;
4167a984708SDavid Chisnallusing ::fmin;
4177a984708SDavid Chisnallusing ::fminf;
4187a984708SDavid Chisnallusing ::hypot;
4197a984708SDavid Chisnallusing ::hypotf;
4207a984708SDavid Chisnallusing ::ilogb;
4217a984708SDavid Chisnallusing ::ilogbf;
4227a984708SDavid Chisnallusing ::lgamma;
4237a984708SDavid Chisnallusing ::lgammaf;
4247a984708SDavid Chisnallusing ::llrint;
4257a984708SDavid Chisnallusing ::llrintf;
4267a984708SDavid Chisnallusing ::llround;
4277a984708SDavid Chisnallusing ::llroundf;
4287a984708SDavid Chisnallusing ::log1p;
4297a984708SDavid Chisnallusing ::log1pf;
4307a984708SDavid Chisnallusing ::log2;
4317a984708SDavid Chisnallusing ::log2f;
4327a984708SDavid Chisnallusing ::logb;
4337a984708SDavid Chisnallusing ::logbf;
4347a984708SDavid Chisnallusing ::lrint;
4357a984708SDavid Chisnallusing ::lrintf;
4367a984708SDavid Chisnallusing ::lround;
4377a984708SDavid Chisnallusing ::lroundf;
4384f7ab58eSDimitry Andric
4397a984708SDavid Chisnallusing ::nan;
4407a984708SDavid Chisnallusing ::nanf;
4414f7ab58eSDimitry Andric
4427a984708SDavid Chisnallusing ::nearbyint;
4437a984708SDavid Chisnallusing ::nearbyintf;
4447a984708SDavid Chisnallusing ::nextafter;
4457a984708SDavid Chisnallusing ::nextafterf;
4467a984708SDavid Chisnallusing ::nexttoward;
4477a984708SDavid Chisnallusing ::nexttowardf;
4487a984708SDavid Chisnallusing ::remainder;
4497a984708SDavid Chisnallusing ::remainderf;
4507a984708SDavid Chisnallusing ::remquo;
4517a984708SDavid Chisnallusing ::remquof;
4527a984708SDavid Chisnallusing ::rint;
4537a984708SDavid Chisnallusing ::rintf;
4547a984708SDavid Chisnallusing ::round;
4557a984708SDavid Chisnallusing ::roundf;
4567a984708SDavid Chisnallusing ::scalbln;
4577a984708SDavid Chisnallusing ::scalblnf;
4587a984708SDavid Chisnallusing ::scalbn;
4597a984708SDavid Chisnallusing ::scalbnf;
4607a984708SDavid Chisnallusing ::tgamma;
4617a984708SDavid Chisnallusing ::tgammaf;
4627a984708SDavid Chisnallusing ::trunc;
4637a984708SDavid Chisnallusing ::truncf;
4647a984708SDavid Chisnall
4657a984708SDavid Chisnallusing ::acosl;
4667a984708SDavid Chisnallusing ::asinl;
4677a984708SDavid Chisnallusing ::atanl;
4687a984708SDavid Chisnallusing ::atan2l;
4697a984708SDavid Chisnallusing ::ceill;
4707a984708SDavid Chisnallusing ::cosl;
4717a984708SDavid Chisnallusing ::coshl;
4727a984708SDavid Chisnallusing ::expl;
4737a984708SDavid Chisnallusing ::fabsl;
4747a984708SDavid Chisnallusing ::floorl;
4757a984708SDavid Chisnallusing ::fmodl;
4767a984708SDavid Chisnallusing ::frexpl;
4777a984708SDavid Chisnallusing ::ldexpl;
4787a984708SDavid Chisnallusing ::logl;
4797a984708SDavid Chisnallusing ::log10l;
4807a984708SDavid Chisnallusing ::modfl;
4817a984708SDavid Chisnallusing ::powl;
4827a984708SDavid Chisnallusing ::sinl;
4837a984708SDavid Chisnallusing ::sinhl;
4847a984708SDavid Chisnallusing ::sqrtl;
4857a984708SDavid Chisnallusing ::tanl;
4869729cf09SDimitry Andric
4877a984708SDavid Chisnallusing ::tanhl;
4887a984708SDavid Chisnallusing ::acoshl;
4897a984708SDavid Chisnallusing ::asinhl;
4907a984708SDavid Chisnallusing ::atanhl;
4917a984708SDavid Chisnallusing ::cbrtl;
4929729cf09SDimitry Andric
4937a984708SDavid Chisnallusing ::copysignl;
4949729cf09SDimitry Andric
4957a984708SDavid Chisnallusing ::erfl;
4967a984708SDavid Chisnallusing ::erfcl;
4977a984708SDavid Chisnallusing ::exp2l;
4987a984708SDavid Chisnallusing ::expm1l;
4997a984708SDavid Chisnallusing ::fdiml;
5007a984708SDavid Chisnallusing ::fmal;
5017a984708SDavid Chisnallusing ::fmaxl;
5027a984708SDavid Chisnallusing ::fminl;
5037a984708SDavid Chisnallusing ::hypotl;
5047a984708SDavid Chisnallusing ::ilogbl;
5057a984708SDavid Chisnallusing ::lgammal;
5067a984708SDavid Chisnallusing ::llrintl;
5077a984708SDavid Chisnallusing ::llroundl;
5087a984708SDavid Chisnallusing ::log1pl;
5097a984708SDavid Chisnallusing ::log2l;
5107a984708SDavid Chisnallusing ::logbl;
5117a984708SDavid Chisnallusing ::lrintl;
5127a984708SDavid Chisnallusing ::lroundl;
5137a984708SDavid Chisnallusing ::nanl;
5147a984708SDavid Chisnallusing ::nearbyintl;
5157a984708SDavid Chisnallusing ::nextafterl;
5167a984708SDavid Chisnallusing ::nexttowardl;
5177a984708SDavid Chisnallusing ::remainderl;
5187a984708SDavid Chisnallusing ::remquol;
5197a984708SDavid Chisnallusing ::rintl;
5207a984708SDavid Chisnallusing ::roundl;
5217a984708SDavid Chisnallusing ::scalblnl;
5227a984708SDavid Chisnallusing ::scalbnl;
5237a984708SDavid Chisnallusing ::tgammal;
5247a984708SDavid Chisnallusing ::truncl;
5257a984708SDavid Chisnall
5267c82a1ecSDimitry Andric#if _LIBCPP_STD_VER > 14
5277c82a1ecSDimitry Andricinline _LIBCPP_INLINE_VISIBILITY float       hypot(       float x,       float y,       float z ) { return sqrt(x*x + y*y + z*z); }
5287c82a1ecSDimitry Andricinline _LIBCPP_INLINE_VISIBILITY double      hypot(      double x,      double y,      double z ) { return sqrt(x*x + y*y + z*z); }
5297c82a1ecSDimitry Andricinline _LIBCPP_INLINE_VISIBILITY long double hypot( long double x, long double y, long double z ) { return sqrt(x*x + y*y + z*z); }
5307c82a1ecSDimitry Andric
5317c82a1ecSDimitry Andrictemplate <class _A1, class _A2, class _A3>
5327c82a1ecSDimitry Andricinline _LIBCPP_INLINE_VISIBILITY
533aed8d94eSDimitry Andrictypename __lazy_enable_if
5347c82a1ecSDimitry Andric<
535aed8d94eSDimitry Andric    is_arithmetic<_A1>::value &&
536aed8d94eSDimitry Andric    is_arithmetic<_A2>::value &&
537aed8d94eSDimitry Andric    is_arithmetic<_A3>::value,
538aed8d94eSDimitry Andric    __promote<_A1, _A2, _A3>
5397c82a1ecSDimitry Andric>::type
5407c82a1ecSDimitry Andrichypot(_A1 __lcpp_x, _A2 __lcpp_y, _A3 __lcpp_z) _NOEXCEPT
5417c82a1ecSDimitry Andric{
542aed8d94eSDimitry Andric    typedef typename __promote<_A1, _A2, _A3>::type __result_type;
543aed8d94eSDimitry Andric    static_assert((!(is_same<_A1, __result_type>::value &&
544aed8d94eSDimitry Andric                     is_same<_A2, __result_type>::value &&
545aed8d94eSDimitry Andric                     is_same<_A3, __result_type>::value)), "");
5467c82a1ecSDimitry Andric    return hypot((__result_type)__lcpp_x, (__result_type)__lcpp_y, (__result_type)__lcpp_z);
5477c82a1ecSDimitry Andric}
5487c82a1ecSDimitry Andric#endif
5497c82a1ecSDimitry Andric
550aed8d94eSDimitry Andrictemplate <class _A1>
5514ba319b5SDimitry Andric_LIBCPP_INLINE_VISIBILITY
552aed8d94eSDimitry Andric_LIBCPP_CONSTEXPR typename enable_if<is_floating_point<_A1>::value, bool>::type
553c4394386SDimitry Andric__libcpp_isnan_or_builtin(_A1 __lcpp_x) _NOEXCEPT
554aed8d94eSDimitry Andric{
555aed8d94eSDimitry Andric#if __has_builtin(__builtin_isnan)
556aed8d94eSDimitry Andric    return __builtin_isnan(__lcpp_x);
557aed8d94eSDimitry Andric#else
558aed8d94eSDimitry Andric    return isnan(__lcpp_x);
559aed8d94eSDimitry Andric#endif
560aed8d94eSDimitry Andric}
561aed8d94eSDimitry Andric
562aed8d94eSDimitry Andrictemplate <class _A1>
5634ba319b5SDimitry Andric_LIBCPP_INLINE_VISIBILITY
564aed8d94eSDimitry Andric_LIBCPP_CONSTEXPR typename enable_if<!is_floating_point<_A1>::value, bool>::type
565c4394386SDimitry Andric__libcpp_isnan_or_builtin(_A1 __lcpp_x) _NOEXCEPT
566aed8d94eSDimitry Andric{
567aed8d94eSDimitry Andric    return isnan(__lcpp_x);
568aed8d94eSDimitry Andric}
569aed8d94eSDimitry Andric
570aed8d94eSDimitry Andrictemplate <class _A1>
5714ba319b5SDimitry Andric_LIBCPP_INLINE_VISIBILITY
572aed8d94eSDimitry Andric_LIBCPP_CONSTEXPR typename enable_if<is_floating_point<_A1>::value, bool>::type
573c4394386SDimitry Andric__libcpp_isinf_or_builtin(_A1 __lcpp_x) _NOEXCEPT
574aed8d94eSDimitry Andric{
575aed8d94eSDimitry Andric#if __has_builtin(__builtin_isinf)
576aed8d94eSDimitry Andric    return __builtin_isinf(__lcpp_x);
577aed8d94eSDimitry Andric#else
578aed8d94eSDimitry Andric    return isinf(__lcpp_x);
579aed8d94eSDimitry Andric#endif
580aed8d94eSDimitry Andric}
581aed8d94eSDimitry Andric
582aed8d94eSDimitry Andrictemplate <class _A1>
5834ba319b5SDimitry Andric_LIBCPP_INLINE_VISIBILITY
584aed8d94eSDimitry Andric_LIBCPP_CONSTEXPR typename enable_if<!is_floating_point<_A1>::value, bool>::type
585c4394386SDimitry Andric__libcpp_isinf_or_builtin(_A1 __lcpp_x) _NOEXCEPT
586aed8d94eSDimitry Andric{
587aed8d94eSDimitry Andric    return isinf(__lcpp_x);
588aed8d94eSDimitry Andric}
589aed8d94eSDimitry Andric
590aed8d94eSDimitry Andrictemplate <class _A1>
5914ba319b5SDimitry Andric_LIBCPP_INLINE_VISIBILITY
592aed8d94eSDimitry Andric_LIBCPP_CONSTEXPR typename enable_if<is_floating_point<_A1>::value, bool>::type
593c4394386SDimitry Andric__libcpp_isfinite_or_builtin(_A1 __lcpp_x) _NOEXCEPT
594aed8d94eSDimitry Andric{
595aed8d94eSDimitry Andric#if __has_builtin(__builtin_isfinite)
596aed8d94eSDimitry Andric    return __builtin_isfinite(__lcpp_x);
597aed8d94eSDimitry Andric#else
598aed8d94eSDimitry Andric    return isfinite(__lcpp_x);
599aed8d94eSDimitry Andric#endif
600aed8d94eSDimitry Andric}
601aed8d94eSDimitry Andric
602aed8d94eSDimitry Andrictemplate <class _A1>
6034ba319b5SDimitry Andric_LIBCPP_INLINE_VISIBILITY
604aed8d94eSDimitry Andric_LIBCPP_CONSTEXPR typename enable_if<!is_floating_point<_A1>::value, bool>::type
605c4394386SDimitry Andric__libcpp_isfinite_or_builtin(_A1 __lcpp_x) _NOEXCEPT
606aed8d94eSDimitry Andric{
607aed8d94eSDimitry Andric    return isfinite(__lcpp_x);
608aed8d94eSDimitry Andric}
609aed8d94eSDimitry Andric
6107a984708SDavid Chisnall_LIBCPP_END_NAMESPACE_STD
6117a984708SDavid Chisnall
6127a984708SDavid Chisnall#endif  // _LIBCPP_CMATH
613