xref: /openbsd-src/gnu/llvm/libcxx/include/math.h (revision a0747c9f67a4ae71ccb71e62a28d1ea19e06a63c)
146035553Spatrick // -*- C++ -*-
246035553Spatrick //===---------------------------- math.h ----------------------------------===//
346035553Spatrick //
446035553Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
546035553Spatrick // See https://llvm.org/LICENSE.txt for license information.
646035553Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
746035553Spatrick //
846035553Spatrick //===----------------------------------------------------------------------===//
946035553Spatrick 
1046035553Spatrick #ifndef _LIBCPP_MATH_H
1146035553Spatrick #define _LIBCPP_MATH_H
1246035553Spatrick 
1346035553Spatrick /*
1446035553Spatrick     math.h synopsis
1546035553Spatrick 
1646035553Spatrick Macros:
1746035553Spatrick 
1846035553Spatrick     HUGE_VAL
1946035553Spatrick     HUGE_VALF               // C99
2046035553Spatrick     HUGE_VALL               // C99
2146035553Spatrick     INFINITY                // C99
2246035553Spatrick     NAN                     // C99
2346035553Spatrick     FP_INFINITE             // C99
2446035553Spatrick     FP_NAN                  // C99
2546035553Spatrick     FP_NORMAL               // C99
2646035553Spatrick     FP_SUBNORMAL            // C99
2746035553Spatrick     FP_ZERO                 // C99
2846035553Spatrick     FP_FAST_FMA             // C99
2946035553Spatrick     FP_FAST_FMAF            // C99
3046035553Spatrick     FP_FAST_FMAL            // C99
3146035553Spatrick     FP_ILOGB0               // C99
3246035553Spatrick     FP_ILOGBNAN             // C99
3346035553Spatrick     MATH_ERRNO              // C99
3446035553Spatrick     MATH_ERREXCEPT          // C99
3546035553Spatrick     math_errhandling        // C99
3646035553Spatrick 
3746035553Spatrick Types:
3846035553Spatrick 
3946035553Spatrick     float_t                 // C99
4046035553Spatrick     double_t                // C99
4146035553Spatrick 
4246035553Spatrick // C90
4346035553Spatrick 
4446035553Spatrick floating_point abs(floating_point x);
4546035553Spatrick 
4646035553Spatrick floating_point acos (arithmetic x);
4746035553Spatrick float          acosf(float x);
4846035553Spatrick long double    acosl(long double x);
4946035553Spatrick 
5046035553Spatrick floating_point asin (arithmetic x);
5146035553Spatrick float          asinf(float x);
5246035553Spatrick long double    asinl(long double x);
5346035553Spatrick 
5446035553Spatrick floating_point atan (arithmetic x);
5546035553Spatrick float          atanf(float x);
5646035553Spatrick long double    atanl(long double x);
5746035553Spatrick 
5846035553Spatrick floating_point atan2 (arithmetic y, arithmetic x);
5946035553Spatrick float          atan2f(float y, float x);
6046035553Spatrick long double    atan2l(long double y, long double x);
6146035553Spatrick 
6246035553Spatrick floating_point ceil (arithmetic x);
6346035553Spatrick float          ceilf(float x);
6446035553Spatrick long double    ceill(long double x);
6546035553Spatrick 
6646035553Spatrick floating_point cos (arithmetic x);
6746035553Spatrick float          cosf(float x);
6846035553Spatrick long double    cosl(long double x);
6946035553Spatrick 
7046035553Spatrick floating_point cosh (arithmetic x);
7146035553Spatrick float          coshf(float x);
7246035553Spatrick long double    coshl(long double x);
7346035553Spatrick 
7446035553Spatrick floating_point exp (arithmetic x);
7546035553Spatrick float          expf(float x);
7646035553Spatrick long double    expl(long double x);
7746035553Spatrick 
7846035553Spatrick floating_point fabs (arithmetic x);
7946035553Spatrick float          fabsf(float x);
8046035553Spatrick long double    fabsl(long double x);
8146035553Spatrick 
8246035553Spatrick floating_point floor (arithmetic x);
8346035553Spatrick float          floorf(float x);
8446035553Spatrick long double    floorl(long double x);
8546035553Spatrick 
8646035553Spatrick floating_point fmod (arithmetic x, arithmetic y);
8746035553Spatrick float          fmodf(float x, float y);
8846035553Spatrick long double    fmodl(long double x, long double y);
8946035553Spatrick 
9046035553Spatrick floating_point frexp (arithmetic value, int* exp);
9146035553Spatrick float          frexpf(float value, int* exp);
9246035553Spatrick long double    frexpl(long double value, int* exp);
9346035553Spatrick 
9446035553Spatrick floating_point ldexp (arithmetic value, int exp);
9546035553Spatrick float          ldexpf(float value, int exp);
9646035553Spatrick long double    ldexpl(long double value, int exp);
9746035553Spatrick 
9846035553Spatrick floating_point log (arithmetic x);
9946035553Spatrick float          logf(float x);
10046035553Spatrick long double    logl(long double x);
10146035553Spatrick 
10246035553Spatrick floating_point log10 (arithmetic x);
10346035553Spatrick float          log10f(float x);
10446035553Spatrick long double    log10l(long double x);
10546035553Spatrick 
10646035553Spatrick floating_point modf (floating_point value, floating_point* iptr);
10746035553Spatrick float          modff(float value, float* iptr);
10846035553Spatrick long double    modfl(long double value, long double* iptr);
10946035553Spatrick 
11046035553Spatrick floating_point pow (arithmetic x, arithmetic y);
11146035553Spatrick float          powf(float x, float y);
11246035553Spatrick long double    powl(long double x, long double y);
11346035553Spatrick 
11446035553Spatrick floating_point sin (arithmetic x);
11546035553Spatrick float          sinf(float x);
11646035553Spatrick long double    sinl(long double x);
11746035553Spatrick 
11846035553Spatrick floating_point sinh (arithmetic x);
11946035553Spatrick float          sinhf(float x);
12046035553Spatrick long double    sinhl(long double x);
12146035553Spatrick 
12246035553Spatrick floating_point sqrt (arithmetic x);
12346035553Spatrick float          sqrtf(float x);
12446035553Spatrick long double    sqrtl(long double x);
12546035553Spatrick 
12646035553Spatrick floating_point tan (arithmetic x);
12746035553Spatrick float          tanf(float x);
12846035553Spatrick long double    tanl(long double x);
12946035553Spatrick 
13046035553Spatrick floating_point tanh (arithmetic x);
13146035553Spatrick float          tanhf(float x);
13246035553Spatrick long double    tanhl(long double x);
13346035553Spatrick 
13446035553Spatrick //  C99
13546035553Spatrick 
13646035553Spatrick bool signbit(arithmetic x);
13746035553Spatrick 
13846035553Spatrick int fpclassify(arithmetic x);
13946035553Spatrick 
14046035553Spatrick bool isfinite(arithmetic x);
14146035553Spatrick bool isinf(arithmetic x);
14246035553Spatrick bool isnan(arithmetic x);
14346035553Spatrick bool isnormal(arithmetic x);
14446035553Spatrick 
14546035553Spatrick bool isgreater(arithmetic x, arithmetic y);
14646035553Spatrick bool isgreaterequal(arithmetic x, arithmetic y);
14746035553Spatrick bool isless(arithmetic x, arithmetic y);
14846035553Spatrick bool islessequal(arithmetic x, arithmetic y);
14946035553Spatrick bool islessgreater(arithmetic x, arithmetic y);
15046035553Spatrick bool isunordered(arithmetic x, arithmetic y);
15146035553Spatrick 
15246035553Spatrick floating_point acosh (arithmetic x);
15346035553Spatrick float          acoshf(float x);
15446035553Spatrick long double    acoshl(long double x);
15546035553Spatrick 
15646035553Spatrick floating_point asinh (arithmetic x);
15746035553Spatrick float          asinhf(float x);
15846035553Spatrick long double    asinhl(long double x);
15946035553Spatrick 
16046035553Spatrick floating_point atanh (arithmetic x);
16146035553Spatrick float          atanhf(float x);
16246035553Spatrick long double    atanhl(long double x);
16346035553Spatrick 
16446035553Spatrick floating_point cbrt (arithmetic x);
16546035553Spatrick float          cbrtf(float x);
16646035553Spatrick long double    cbrtl(long double x);
16746035553Spatrick 
16846035553Spatrick floating_point copysign (arithmetic x, arithmetic y);
16946035553Spatrick float          copysignf(float x, float y);
17046035553Spatrick long double    copysignl(long double x, long double y);
17146035553Spatrick 
17246035553Spatrick floating_point erf (arithmetic x);
17346035553Spatrick float          erff(float x);
17446035553Spatrick long double    erfl(long double x);
17546035553Spatrick 
17646035553Spatrick floating_point erfc (arithmetic x);
17746035553Spatrick float          erfcf(float x);
17846035553Spatrick long double    erfcl(long double x);
17946035553Spatrick 
18046035553Spatrick floating_point exp2 (arithmetic x);
18146035553Spatrick float          exp2f(float x);
18246035553Spatrick long double    exp2l(long double x);
18346035553Spatrick 
18446035553Spatrick floating_point expm1 (arithmetic x);
18546035553Spatrick float          expm1f(float x);
18646035553Spatrick long double    expm1l(long double x);
18746035553Spatrick 
18846035553Spatrick floating_point fdim (arithmetic x, arithmetic y);
18946035553Spatrick float          fdimf(float x, float y);
19046035553Spatrick long double    fdiml(long double x, long double y);
19146035553Spatrick 
19246035553Spatrick floating_point fma (arithmetic x, arithmetic y, arithmetic z);
19346035553Spatrick float          fmaf(float x, float y, float z);
19446035553Spatrick long double    fmal(long double x, long double y, long double z);
19546035553Spatrick 
19646035553Spatrick floating_point fmax (arithmetic x, arithmetic y);
19746035553Spatrick float          fmaxf(float x, float y);
19846035553Spatrick long double    fmaxl(long double x, long double y);
19946035553Spatrick 
20046035553Spatrick floating_point fmin (arithmetic x, arithmetic y);
20146035553Spatrick float          fminf(float x, float y);
20246035553Spatrick long double    fminl(long double x, long double y);
20346035553Spatrick 
20446035553Spatrick floating_point hypot (arithmetic x, arithmetic y);
20546035553Spatrick float          hypotf(float x, float y);
20646035553Spatrick long double    hypotl(long double x, long double y);
20746035553Spatrick 
20846035553Spatrick int ilogb (arithmetic x);
20946035553Spatrick int ilogbf(float x);
21046035553Spatrick int ilogbl(long double x);
21146035553Spatrick 
21246035553Spatrick floating_point lgamma (arithmetic x);
21346035553Spatrick float          lgammaf(float x);
21446035553Spatrick long double    lgammal(long double x);
21546035553Spatrick 
21646035553Spatrick long long llrint (arithmetic x);
21746035553Spatrick long long llrintf(float x);
21846035553Spatrick long long llrintl(long double x);
21946035553Spatrick 
22046035553Spatrick long long llround (arithmetic x);
22146035553Spatrick long long llroundf(float x);
22246035553Spatrick long long llroundl(long double x);
22346035553Spatrick 
22446035553Spatrick floating_point log1p (arithmetic x);
22546035553Spatrick float          log1pf(float x);
22646035553Spatrick long double    log1pl(long double x);
22746035553Spatrick 
22846035553Spatrick floating_point log2 (arithmetic x);
22946035553Spatrick float          log2f(float x);
23046035553Spatrick long double    log2l(long double x);
23146035553Spatrick 
23246035553Spatrick floating_point logb (arithmetic x);
23346035553Spatrick float          logbf(float x);
23446035553Spatrick long double    logbl(long double x);
23546035553Spatrick 
23646035553Spatrick long lrint (arithmetic x);
23746035553Spatrick long lrintf(float x);
23846035553Spatrick long lrintl(long double x);
23946035553Spatrick 
24046035553Spatrick long lround (arithmetic x);
24146035553Spatrick long lroundf(float x);
24246035553Spatrick long lroundl(long double x);
24346035553Spatrick 
24446035553Spatrick double      nan (const char* str);
24546035553Spatrick float       nanf(const char* str);
24646035553Spatrick long double nanl(const char* str);
24746035553Spatrick 
24846035553Spatrick floating_point nearbyint (arithmetic x);
24946035553Spatrick float          nearbyintf(float x);
25046035553Spatrick long double    nearbyintl(long double x);
25146035553Spatrick 
25246035553Spatrick floating_point nextafter (arithmetic x, arithmetic y);
25346035553Spatrick float          nextafterf(float x, float y);
25446035553Spatrick long double    nextafterl(long double x, long double y);
25546035553Spatrick 
25646035553Spatrick floating_point nexttoward (arithmetic x, long double y);
25746035553Spatrick float          nexttowardf(float x, long double y);
25846035553Spatrick long double    nexttowardl(long double x, long double y);
25946035553Spatrick 
26046035553Spatrick floating_point remainder (arithmetic x, arithmetic y);
26146035553Spatrick float          remainderf(float x, float y);
26246035553Spatrick long double    remainderl(long double x, long double y);
26346035553Spatrick 
26446035553Spatrick floating_point remquo (arithmetic x, arithmetic y, int* pquo);
26546035553Spatrick float          remquof(float x, float y, int* pquo);
26646035553Spatrick long double    remquol(long double x, long double y, int* pquo);
26746035553Spatrick 
26846035553Spatrick floating_point rint (arithmetic x);
26946035553Spatrick float          rintf(float x);
27046035553Spatrick long double    rintl(long double x);
27146035553Spatrick 
27246035553Spatrick floating_point round (arithmetic x);
27346035553Spatrick float          roundf(float x);
27446035553Spatrick long double    roundl(long double x);
27546035553Spatrick 
27646035553Spatrick floating_point scalbln (arithmetic x, long ex);
27746035553Spatrick float          scalblnf(float x, long ex);
27846035553Spatrick long double    scalblnl(long double x, long ex);
27946035553Spatrick 
28046035553Spatrick floating_point scalbn (arithmetic x, int ex);
28146035553Spatrick float          scalbnf(float x, int ex);
28246035553Spatrick long double    scalbnl(long double x, int ex);
28346035553Spatrick 
28446035553Spatrick floating_point tgamma (arithmetic x);
28546035553Spatrick float          tgammaf(float x);
28646035553Spatrick long double    tgammal(long double x);
28746035553Spatrick 
28846035553Spatrick floating_point trunc (arithmetic x);
28946035553Spatrick float          truncf(float x);
29046035553Spatrick long double    truncl(long double x);
29146035553Spatrick 
29246035553Spatrick */
29346035553Spatrick 
29446035553Spatrick #include <__config>
29546035553Spatrick 
29646035553Spatrick #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
29746035553Spatrick #pragma GCC system_header
29846035553Spatrick #endif
29946035553Spatrick 
30046035553Spatrick #include_next <math.h>
30146035553Spatrick 
30246035553Spatrick #ifdef __cplusplus
30346035553Spatrick 
30446035553Spatrick // We support including .h headers inside 'extern "C"' contexts, so switch
30546035553Spatrick // back to C++ linkage before including these C++ headers.
30646035553Spatrick extern "C++" {
30746035553Spatrick 
308862558c2Skettenis #include <stdlib.h>
30946035553Spatrick #include <type_traits>
31046035553Spatrick #include <limits>
31146035553Spatrick 
31246035553Spatrick // signbit
31346035553Spatrick 
31446035553Spatrick #ifdef signbit
31546035553Spatrick 
31646035553Spatrick template <class _A1>
31746035553Spatrick _LIBCPP_INLINE_VISIBILITY
31846035553Spatrick bool
31946035553Spatrick __libcpp_signbit(_A1 __lcpp_x) _NOEXCEPT
32046035553Spatrick {
321*a0747c9fSpatrick #if __has_builtin(__builtin_signbit)
322*a0747c9fSpatrick     return __builtin_signbit(__lcpp_x);
323*a0747c9fSpatrick #else
32446035553Spatrick     return signbit(__lcpp_x);
325*a0747c9fSpatrick #endif
32646035553Spatrick }
32746035553Spatrick 
32846035553Spatrick #undef signbit
32946035553Spatrick 
33046035553Spatrick template <class _A1>
33146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
33246035553Spatrick typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
33346035553Spatrick signbit(_A1 __lcpp_x) _NOEXCEPT
33446035553Spatrick {
33546035553Spatrick     return __libcpp_signbit((typename std::__promote<_A1>::type)__lcpp_x);
33646035553Spatrick }
33746035553Spatrick 
33846035553Spatrick template <class _A1>
33946035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
34046035553Spatrick typename std::enable_if<
34146035553Spatrick     std::is_integral<_A1>::value && std::is_signed<_A1>::value, bool>::type
34246035553Spatrick signbit(_A1 __lcpp_x) _NOEXCEPT
34346035553Spatrick { return __lcpp_x < 0; }
34446035553Spatrick 
34546035553Spatrick template <class _A1>
34646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
34746035553Spatrick typename std::enable_if<
34846035553Spatrick     std::is_integral<_A1>::value && !std::is_signed<_A1>::value, bool>::type
34946035553Spatrick signbit(_A1) _NOEXCEPT
35046035553Spatrick { return false; }
35146035553Spatrick 
35246035553Spatrick #elif defined(_LIBCPP_MSVCRT)
35346035553Spatrick 
35446035553Spatrick template <typename _A1>
35546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
35646035553Spatrick typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
35746035553Spatrick signbit(_A1 __lcpp_x) _NOEXCEPT
35846035553Spatrick {
35946035553Spatrick   return ::signbit(static_cast<typename std::__promote<_A1>::type>(__lcpp_x));
36046035553Spatrick }
36146035553Spatrick 
36246035553Spatrick template <class _A1>
36346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
36446035553Spatrick typename std::enable_if<
36546035553Spatrick     std::is_integral<_A1>::value && std::is_signed<_A1>::value, bool>::type
36646035553Spatrick signbit(_A1 __lcpp_x) _NOEXCEPT
36746035553Spatrick { return __lcpp_x < 0; }
36846035553Spatrick 
36946035553Spatrick template <class _A1>
37046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
37146035553Spatrick typename std::enable_if<
37246035553Spatrick     std::is_integral<_A1>::value && !std::is_signed<_A1>::value, bool>::type
37346035553Spatrick signbit(_A1) _NOEXCEPT
37446035553Spatrick { return false; }
37546035553Spatrick 
37646035553Spatrick #endif // signbit
37746035553Spatrick 
37846035553Spatrick // fpclassify
37946035553Spatrick 
38046035553Spatrick #ifdef fpclassify
38146035553Spatrick 
38246035553Spatrick template <class _A1>
38346035553Spatrick _LIBCPP_INLINE_VISIBILITY
38446035553Spatrick int
38546035553Spatrick __libcpp_fpclassify(_A1 __lcpp_x) _NOEXCEPT
38646035553Spatrick {
387*a0747c9fSpatrick #if __has_builtin(__builtin_fpclassify)
388*a0747c9fSpatrick   return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL,
389*a0747c9fSpatrick                                 FP_ZERO, __lcpp_x);
390*a0747c9fSpatrick #else
39146035553Spatrick     return fpclassify(__lcpp_x);
392*a0747c9fSpatrick #endif
39346035553Spatrick }
39446035553Spatrick 
39546035553Spatrick #undef fpclassify
39646035553Spatrick 
39746035553Spatrick template <class _A1>
39846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
39946035553Spatrick typename std::enable_if<std::is_floating_point<_A1>::value, int>::type
40046035553Spatrick fpclassify(_A1 __lcpp_x) _NOEXCEPT
40146035553Spatrick {
40246035553Spatrick     return __libcpp_fpclassify((typename std::__promote<_A1>::type)__lcpp_x);
40346035553Spatrick }
40446035553Spatrick 
40546035553Spatrick template <class _A1>
40646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
40746035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, int>::type
40846035553Spatrick fpclassify(_A1 __lcpp_x) _NOEXCEPT
40946035553Spatrick { return __lcpp_x == 0 ? FP_ZERO : FP_NORMAL; }
41046035553Spatrick 
41146035553Spatrick #elif defined(_LIBCPP_MSVCRT)
41246035553Spatrick 
41346035553Spatrick template <typename _A1>
41446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
41546035553Spatrick typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
41646035553Spatrick fpclassify(_A1 __lcpp_x) _NOEXCEPT
41746035553Spatrick {
41846035553Spatrick   return ::fpclassify(static_cast<typename std::__promote<_A1>::type>(__lcpp_x));
41946035553Spatrick }
42046035553Spatrick 
42146035553Spatrick template <class _A1>
42246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
42346035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, int>::type
42446035553Spatrick fpclassify(_A1 __lcpp_x) _NOEXCEPT
42546035553Spatrick { return __lcpp_x == 0 ? FP_ZERO : FP_NORMAL; }
42646035553Spatrick 
42746035553Spatrick #endif // fpclassify
42846035553Spatrick 
42946035553Spatrick // isfinite
43046035553Spatrick 
43146035553Spatrick #ifdef isfinite
43246035553Spatrick 
43346035553Spatrick template <class _A1>
43446035553Spatrick _LIBCPP_INLINE_VISIBILITY
43546035553Spatrick bool
43646035553Spatrick __libcpp_isfinite(_A1 __lcpp_x) _NOEXCEPT
43746035553Spatrick {
438*a0747c9fSpatrick #if __has_builtin(__builtin_isfinite)
439*a0747c9fSpatrick     return __builtin_isfinite(__lcpp_x);
440*a0747c9fSpatrick #else
44146035553Spatrick     return isfinite(__lcpp_x);
442*a0747c9fSpatrick #endif
44346035553Spatrick }
44446035553Spatrick 
44546035553Spatrick #undef isfinite
44646035553Spatrick 
44746035553Spatrick template <class _A1>
44846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
44946035553Spatrick typename std::enable_if<
45046035553Spatrick     std::is_arithmetic<_A1>::value && std::numeric_limits<_A1>::has_infinity,
45146035553Spatrick     bool>::type
45246035553Spatrick isfinite(_A1 __lcpp_x) _NOEXCEPT
45346035553Spatrick {
45446035553Spatrick     return __libcpp_isfinite((typename std::__promote<_A1>::type)__lcpp_x);
45546035553Spatrick }
45646035553Spatrick 
45746035553Spatrick template <class _A1>
45846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
45946035553Spatrick typename std::enable_if<
46046035553Spatrick     std::is_arithmetic<_A1>::value && !std::numeric_limits<_A1>::has_infinity,
46146035553Spatrick     bool>::type
46246035553Spatrick isfinite(_A1) _NOEXCEPT
46346035553Spatrick { return true; }
46446035553Spatrick 
46546035553Spatrick #endif // isfinite
46646035553Spatrick 
46746035553Spatrick // isinf
46846035553Spatrick 
46946035553Spatrick #ifdef isinf
47046035553Spatrick 
47146035553Spatrick template <class _A1>
47246035553Spatrick _LIBCPP_INLINE_VISIBILITY
47346035553Spatrick bool
47446035553Spatrick __libcpp_isinf(_A1 __lcpp_x) _NOEXCEPT
47546035553Spatrick {
476*a0747c9fSpatrick #if __has_builtin(__builtin_isinf)
477*a0747c9fSpatrick     return __builtin_isinf(__lcpp_x);
478*a0747c9fSpatrick #else
47946035553Spatrick     return isinf(__lcpp_x);
480*a0747c9fSpatrick #endif
48146035553Spatrick }
48246035553Spatrick 
48346035553Spatrick #undef isinf
48446035553Spatrick 
48546035553Spatrick template <class _A1>
48646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
48746035553Spatrick typename std::enable_if<
48846035553Spatrick     std::is_arithmetic<_A1>::value && std::numeric_limits<_A1>::has_infinity,
48946035553Spatrick     bool>::type
49046035553Spatrick isinf(_A1 __lcpp_x) _NOEXCEPT
49146035553Spatrick {
49246035553Spatrick     return __libcpp_isinf((typename std::__promote<_A1>::type)__lcpp_x);
49346035553Spatrick }
49446035553Spatrick 
49546035553Spatrick template <class _A1>
49646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
49746035553Spatrick typename std::enable_if<
49846035553Spatrick     std::is_arithmetic<_A1>::value && !std::numeric_limits<_A1>::has_infinity,
49946035553Spatrick     bool>::type
50046035553Spatrick isinf(_A1) _NOEXCEPT
50146035553Spatrick { return false; }
50246035553Spatrick 
50346035553Spatrick #ifdef _LIBCPP_PREFERRED_OVERLOAD
50446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
50546035553Spatrick bool
50646035553Spatrick isinf(float __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); }
50746035553Spatrick 
50846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
50946035553Spatrick bool
51046035553Spatrick isinf(double __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); }
51146035553Spatrick 
51246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
51346035553Spatrick bool
51446035553Spatrick isinf(long double __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); }
51546035553Spatrick #endif
51646035553Spatrick 
51746035553Spatrick #endif // isinf
51846035553Spatrick 
51946035553Spatrick // isnan
52046035553Spatrick 
52146035553Spatrick #ifdef isnan
52246035553Spatrick 
52346035553Spatrick template <class _A1>
52446035553Spatrick _LIBCPP_INLINE_VISIBILITY
52546035553Spatrick bool
52646035553Spatrick __libcpp_isnan(_A1 __lcpp_x) _NOEXCEPT
52746035553Spatrick {
52846035553Spatrick #if __has_builtin(__builtin_isnan)
52946035553Spatrick     return __builtin_isnan(__lcpp_x);
53046035553Spatrick #else
53146035553Spatrick     return isnan(__lcpp_x);
53246035553Spatrick #endif
53346035553Spatrick }
53446035553Spatrick 
53546035553Spatrick #undef isnan
53646035553Spatrick 
53746035553Spatrick template <class _A1>
53846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
53946035553Spatrick typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
54046035553Spatrick isnan(_A1 __lcpp_x) _NOEXCEPT
54146035553Spatrick {
54246035553Spatrick     return __libcpp_isnan((typename std::__promote<_A1>::type)__lcpp_x);
54346035553Spatrick }
54446035553Spatrick 
54546035553Spatrick template <class _A1>
54646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
54746035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, bool>::type
54846035553Spatrick isnan(_A1) _NOEXCEPT
54946035553Spatrick { return false; }
55046035553Spatrick 
55146035553Spatrick #ifdef _LIBCPP_PREFERRED_OVERLOAD
55246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
55346035553Spatrick bool
55446035553Spatrick isnan(float __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); }
55546035553Spatrick 
55646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
55746035553Spatrick bool
55846035553Spatrick isnan(double __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); }
55946035553Spatrick 
56046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
56146035553Spatrick bool
56246035553Spatrick isnan(long double __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); }
56346035553Spatrick #endif
56446035553Spatrick 
56546035553Spatrick #endif // isnan
56646035553Spatrick 
56746035553Spatrick // isnormal
56846035553Spatrick 
56946035553Spatrick #ifdef isnormal
57046035553Spatrick 
57146035553Spatrick template <class _A1>
57246035553Spatrick _LIBCPP_INLINE_VISIBILITY
57346035553Spatrick bool
57446035553Spatrick __libcpp_isnormal(_A1 __lcpp_x) _NOEXCEPT
57546035553Spatrick {
576*a0747c9fSpatrick #if __has_builtin(__builtin_isnormal)
577*a0747c9fSpatrick     return __builtin_isnormal(__lcpp_x);
578*a0747c9fSpatrick #else
57946035553Spatrick     return isnormal(__lcpp_x);
580*a0747c9fSpatrick #endif
58146035553Spatrick }
58246035553Spatrick 
58346035553Spatrick #undef isnormal
58446035553Spatrick 
58546035553Spatrick template <class _A1>
58646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
58746035553Spatrick typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
58846035553Spatrick isnormal(_A1 __lcpp_x) _NOEXCEPT
58946035553Spatrick {
59046035553Spatrick     return __libcpp_isnormal((typename std::__promote<_A1>::type)__lcpp_x);
59146035553Spatrick }
59246035553Spatrick 
59346035553Spatrick template <class _A1>
59446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
59546035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, bool>::type
59646035553Spatrick isnormal(_A1 __lcpp_x) _NOEXCEPT
59746035553Spatrick { return __lcpp_x != 0; }
59846035553Spatrick 
59946035553Spatrick #endif // isnormal
60046035553Spatrick 
60146035553Spatrick // isgreater
60246035553Spatrick 
60346035553Spatrick #ifdef isgreater
60446035553Spatrick 
60546035553Spatrick template <class _A1, class _A2>
60646035553Spatrick _LIBCPP_INLINE_VISIBILITY
60746035553Spatrick bool
60846035553Spatrick __libcpp_isgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
60946035553Spatrick {
61046035553Spatrick     return isgreater(__lcpp_x, __lcpp_y);
61146035553Spatrick }
61246035553Spatrick 
61346035553Spatrick #undef isgreater
61446035553Spatrick 
61546035553Spatrick template <class _A1, class _A2>
61646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
61746035553Spatrick typename std::enable_if
61846035553Spatrick <
61946035553Spatrick     std::is_arithmetic<_A1>::value &&
62046035553Spatrick     std::is_arithmetic<_A2>::value,
62146035553Spatrick     bool
62246035553Spatrick >::type
62346035553Spatrick isgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
62446035553Spatrick {
62546035553Spatrick     typedef typename std::__promote<_A1, _A2>::type type;
62646035553Spatrick     return __libcpp_isgreater((type)__lcpp_x, (type)__lcpp_y);
62746035553Spatrick }
62846035553Spatrick 
62946035553Spatrick #endif // isgreater
63046035553Spatrick 
63146035553Spatrick // isgreaterequal
63246035553Spatrick 
63346035553Spatrick #ifdef isgreaterequal
63446035553Spatrick 
63546035553Spatrick template <class _A1, class _A2>
63646035553Spatrick _LIBCPP_INLINE_VISIBILITY
63746035553Spatrick bool
63846035553Spatrick __libcpp_isgreaterequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
63946035553Spatrick {
64046035553Spatrick     return isgreaterequal(__lcpp_x, __lcpp_y);
64146035553Spatrick }
64246035553Spatrick 
64346035553Spatrick #undef isgreaterequal
64446035553Spatrick 
64546035553Spatrick template <class _A1, class _A2>
64646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
64746035553Spatrick typename std::enable_if
64846035553Spatrick <
64946035553Spatrick     std::is_arithmetic<_A1>::value &&
65046035553Spatrick     std::is_arithmetic<_A2>::value,
65146035553Spatrick     bool
65246035553Spatrick >::type
65346035553Spatrick isgreaterequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
65446035553Spatrick {
65546035553Spatrick     typedef typename std::__promote<_A1, _A2>::type type;
65646035553Spatrick     return __libcpp_isgreaterequal((type)__lcpp_x, (type)__lcpp_y);
65746035553Spatrick }
65846035553Spatrick 
65946035553Spatrick #endif // isgreaterequal
66046035553Spatrick 
66146035553Spatrick // isless
66246035553Spatrick 
66346035553Spatrick #ifdef isless
66446035553Spatrick 
66546035553Spatrick template <class _A1, class _A2>
66646035553Spatrick _LIBCPP_INLINE_VISIBILITY
66746035553Spatrick bool
66846035553Spatrick __libcpp_isless(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
66946035553Spatrick {
67046035553Spatrick     return isless(__lcpp_x, __lcpp_y);
67146035553Spatrick }
67246035553Spatrick 
67346035553Spatrick #undef isless
67446035553Spatrick 
67546035553Spatrick template <class _A1, class _A2>
67646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
67746035553Spatrick typename std::enable_if
67846035553Spatrick <
67946035553Spatrick     std::is_arithmetic<_A1>::value &&
68046035553Spatrick     std::is_arithmetic<_A2>::value,
68146035553Spatrick     bool
68246035553Spatrick >::type
68346035553Spatrick isless(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
68446035553Spatrick {
68546035553Spatrick     typedef typename std::__promote<_A1, _A2>::type type;
68646035553Spatrick     return __libcpp_isless((type)__lcpp_x, (type)__lcpp_y);
68746035553Spatrick }
68846035553Spatrick 
68946035553Spatrick #endif // isless
69046035553Spatrick 
69146035553Spatrick // islessequal
69246035553Spatrick 
69346035553Spatrick #ifdef islessequal
69446035553Spatrick 
69546035553Spatrick template <class _A1, class _A2>
69646035553Spatrick _LIBCPP_INLINE_VISIBILITY
69746035553Spatrick bool
69846035553Spatrick __libcpp_islessequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
69946035553Spatrick {
70046035553Spatrick     return islessequal(__lcpp_x, __lcpp_y);
70146035553Spatrick }
70246035553Spatrick 
70346035553Spatrick #undef islessequal
70446035553Spatrick 
70546035553Spatrick template <class _A1, class _A2>
70646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
70746035553Spatrick typename std::enable_if
70846035553Spatrick <
70946035553Spatrick     std::is_arithmetic<_A1>::value &&
71046035553Spatrick     std::is_arithmetic<_A2>::value,
71146035553Spatrick     bool
71246035553Spatrick >::type
71346035553Spatrick islessequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
71446035553Spatrick {
71546035553Spatrick     typedef typename std::__promote<_A1, _A2>::type type;
71646035553Spatrick     return __libcpp_islessequal((type)__lcpp_x, (type)__lcpp_y);
71746035553Spatrick }
71846035553Spatrick 
71946035553Spatrick #endif // islessequal
72046035553Spatrick 
72146035553Spatrick // islessgreater
72246035553Spatrick 
72346035553Spatrick #ifdef islessgreater
72446035553Spatrick 
72546035553Spatrick template <class _A1, class _A2>
72646035553Spatrick _LIBCPP_INLINE_VISIBILITY
72746035553Spatrick bool
72846035553Spatrick __libcpp_islessgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
72946035553Spatrick {
73046035553Spatrick     return islessgreater(__lcpp_x, __lcpp_y);
73146035553Spatrick }
73246035553Spatrick 
73346035553Spatrick #undef islessgreater
73446035553Spatrick 
73546035553Spatrick template <class _A1, class _A2>
73646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
73746035553Spatrick typename std::enable_if
73846035553Spatrick <
73946035553Spatrick     std::is_arithmetic<_A1>::value &&
74046035553Spatrick     std::is_arithmetic<_A2>::value,
74146035553Spatrick     bool
74246035553Spatrick >::type
74346035553Spatrick islessgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
74446035553Spatrick {
74546035553Spatrick     typedef typename std::__promote<_A1, _A2>::type type;
74646035553Spatrick     return __libcpp_islessgreater((type)__lcpp_x, (type)__lcpp_y);
74746035553Spatrick }
74846035553Spatrick 
74946035553Spatrick #endif // islessgreater
75046035553Spatrick 
75146035553Spatrick // isunordered
75246035553Spatrick 
75346035553Spatrick #ifdef isunordered
75446035553Spatrick 
75546035553Spatrick template <class _A1, class _A2>
75646035553Spatrick _LIBCPP_INLINE_VISIBILITY
75746035553Spatrick bool
75846035553Spatrick __libcpp_isunordered(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
75946035553Spatrick {
76046035553Spatrick     return isunordered(__lcpp_x, __lcpp_y);
76146035553Spatrick }
76246035553Spatrick 
76346035553Spatrick #undef isunordered
76446035553Spatrick 
76546035553Spatrick template <class _A1, class _A2>
76646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
76746035553Spatrick typename std::enable_if
76846035553Spatrick <
76946035553Spatrick     std::is_arithmetic<_A1>::value &&
77046035553Spatrick     std::is_arithmetic<_A2>::value,
77146035553Spatrick     bool
77246035553Spatrick >::type
77346035553Spatrick isunordered(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
77446035553Spatrick {
77546035553Spatrick     typedef typename std::__promote<_A1, _A2>::type type;
77646035553Spatrick     return __libcpp_isunordered((type)__lcpp_x, (type)__lcpp_y);
77746035553Spatrick }
77846035553Spatrick 
77946035553Spatrick #endif // isunordered
78046035553Spatrick 
78146035553Spatrick // abs
782862558c2Skettenis //
783862558c2Skettenis // handled in stdlib.h
78446035553Spatrick 
78546035553Spatrick // div
786862558c2Skettenis //
787862558c2Skettenis // handled in stdlib.h
78846035553Spatrick 
78946035553Spatrick // acos
79046035553Spatrick 
79146035553Spatrick #if !(defined(_AIX) || defined(__sun__))
79246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       acos(float __lcpp_x) _NOEXCEPT       {return ::acosf(__lcpp_x);}
79346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double acos(long double __lcpp_x) _NOEXCEPT {return ::acosl(__lcpp_x);}
79446035553Spatrick #endif
79546035553Spatrick 
79646035553Spatrick template <class _A1>
79746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
79846035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
79946035553Spatrick acos(_A1 __lcpp_x) _NOEXCEPT {return ::acos((double)__lcpp_x);}
80046035553Spatrick 
80146035553Spatrick // asin
80246035553Spatrick 
80346035553Spatrick #if !(defined(_AIX) || defined(__sun__))
80446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       asin(float __lcpp_x) _NOEXCEPT       {return ::asinf(__lcpp_x);}
80546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double asin(long double __lcpp_x) _NOEXCEPT {return ::asinl(__lcpp_x);}
80646035553Spatrick #endif
80746035553Spatrick 
80846035553Spatrick template <class _A1>
80946035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
81046035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
81146035553Spatrick asin(_A1 __lcpp_x) _NOEXCEPT {return ::asin((double)__lcpp_x);}
81246035553Spatrick 
81346035553Spatrick // atan
81446035553Spatrick 
81546035553Spatrick #if !(defined(_AIX) || defined(__sun__))
81646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       atan(float __lcpp_x) _NOEXCEPT       {return ::atanf(__lcpp_x);}
81746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double atan(long double __lcpp_x) _NOEXCEPT {return ::atanl(__lcpp_x);}
81846035553Spatrick #endif
81946035553Spatrick 
82046035553Spatrick template <class _A1>
82146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
82246035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
82346035553Spatrick atan(_A1 __lcpp_x) _NOEXCEPT {return ::atan((double)__lcpp_x);}
82446035553Spatrick 
82546035553Spatrick // atan2
82646035553Spatrick 
82746035553Spatrick #if !(defined(_AIX) || defined(__sun__))
82846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       atan2(float __lcpp_y, float __lcpp_x) _NOEXCEPT             {return ::atan2f(__lcpp_y, __lcpp_x);}
82946035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double atan2(long double __lcpp_y, long double __lcpp_x) _NOEXCEPT {return ::atan2l(__lcpp_y, __lcpp_x);}
83046035553Spatrick #endif
83146035553Spatrick 
83246035553Spatrick template <class _A1, class _A2>
83346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
83446035553Spatrick typename std::_EnableIf
83546035553Spatrick <
83646035553Spatrick     std::is_arithmetic<_A1>::value &&
83746035553Spatrick     std::is_arithmetic<_A2>::value,
83846035553Spatrick     std::__promote<_A1, _A2>
83946035553Spatrick >::type
84046035553Spatrick atan2(_A1 __lcpp_y, _A2 __lcpp_x) _NOEXCEPT
84146035553Spatrick {
84246035553Spatrick     typedef typename std::__promote<_A1, _A2>::type __result_type;
84346035553Spatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
84446035553Spatrick                      std::_IsSame<_A2, __result_type>::value)), "");
84546035553Spatrick     return ::atan2((__result_type)__lcpp_y, (__result_type)__lcpp_x);
84646035553Spatrick }
84746035553Spatrick 
84846035553Spatrick // ceil
84946035553Spatrick 
85046035553Spatrick #if !(defined(_AIX) || defined(__sun__))
85146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       ceil(float __lcpp_x) _NOEXCEPT       {return ::ceilf(__lcpp_x);}
85246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double ceil(long double __lcpp_x) _NOEXCEPT {return ::ceill(__lcpp_x);}
85346035553Spatrick #endif
85446035553Spatrick 
85546035553Spatrick template <class _A1>
85646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
85746035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
85846035553Spatrick ceil(_A1 __lcpp_x) _NOEXCEPT {return ::ceil((double)__lcpp_x);}
85946035553Spatrick 
86046035553Spatrick // cos
86146035553Spatrick 
86246035553Spatrick #if !(defined(_AIX) || defined(__sun__))
86346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       cos(float __lcpp_x) _NOEXCEPT       {return ::cosf(__lcpp_x);}
86446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double cos(long double __lcpp_x) _NOEXCEPT {return ::cosl(__lcpp_x);}
86546035553Spatrick #endif
86646035553Spatrick 
86746035553Spatrick template <class _A1>
86846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
86946035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
87046035553Spatrick cos(_A1 __lcpp_x) _NOEXCEPT {return ::cos((double)__lcpp_x);}
87146035553Spatrick 
87246035553Spatrick // cosh
87346035553Spatrick 
87446035553Spatrick #if !(defined(_AIX) || defined(__sun__))
87546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       cosh(float __lcpp_x) _NOEXCEPT       {return ::coshf(__lcpp_x);}
87646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double cosh(long double __lcpp_x) _NOEXCEPT {return ::coshl(__lcpp_x);}
87746035553Spatrick #endif
87846035553Spatrick 
87946035553Spatrick template <class _A1>
88046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
88146035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
88246035553Spatrick cosh(_A1 __lcpp_x) _NOEXCEPT {return ::cosh((double)__lcpp_x);}
88346035553Spatrick 
88446035553Spatrick // exp
88546035553Spatrick 
88646035553Spatrick #if !(defined(_AIX) || defined(__sun__))
88746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       exp(float __lcpp_x) _NOEXCEPT       {return ::expf(__lcpp_x);}
88846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double exp(long double __lcpp_x) _NOEXCEPT {return ::expl(__lcpp_x);}
88946035553Spatrick #endif
89046035553Spatrick 
89146035553Spatrick template <class _A1>
89246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
89346035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
89446035553Spatrick exp(_A1 __lcpp_x) _NOEXCEPT {return ::exp((double)__lcpp_x);}
89546035553Spatrick 
89646035553Spatrick // fabs
89746035553Spatrick 
89846035553Spatrick #if !(defined(_AIX) || defined(__sun__))
89946035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       fabs(float __lcpp_x) _NOEXCEPT       {return ::fabsf(__lcpp_x);}
90046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double fabs(long double __lcpp_x) _NOEXCEPT {return ::fabsl(__lcpp_x);}
90146035553Spatrick #endif
90246035553Spatrick 
90346035553Spatrick template <class _A1>
90446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
90546035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
90646035553Spatrick fabs(_A1 __lcpp_x) _NOEXCEPT {return ::fabs((double)__lcpp_x);}
90746035553Spatrick 
90846035553Spatrick // floor
90946035553Spatrick 
91046035553Spatrick #if !(defined(_AIX) || defined(__sun__))
91146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       floor(float __lcpp_x) _NOEXCEPT       {return ::floorf(__lcpp_x);}
91246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double floor(long double __lcpp_x) _NOEXCEPT {return ::floorl(__lcpp_x);}
91346035553Spatrick #endif
91446035553Spatrick 
91546035553Spatrick template <class _A1>
91646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
91746035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
91846035553Spatrick floor(_A1 __lcpp_x) _NOEXCEPT {return ::floor((double)__lcpp_x);}
91946035553Spatrick 
92046035553Spatrick // fmod
92146035553Spatrick 
92246035553Spatrick #if !(defined(_AIX) || defined(__sun__))
92346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       fmod(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::fmodf(__lcpp_x, __lcpp_y);}
92446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double fmod(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fmodl(__lcpp_x, __lcpp_y);}
92546035553Spatrick #endif
92646035553Spatrick 
92746035553Spatrick template <class _A1, class _A2>
92846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
92946035553Spatrick typename std::_EnableIf
93046035553Spatrick <
93146035553Spatrick     std::is_arithmetic<_A1>::value &&
93246035553Spatrick     std::is_arithmetic<_A2>::value,
93346035553Spatrick     std::__promote<_A1, _A2>
93446035553Spatrick >::type
93546035553Spatrick fmod(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
93646035553Spatrick {
93746035553Spatrick     typedef typename std::__promote<_A1, _A2>::type __result_type;
93846035553Spatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
93946035553Spatrick                      std::_IsSame<_A2, __result_type>::value)), "");
94046035553Spatrick     return ::fmod((__result_type)__lcpp_x, (__result_type)__lcpp_y);
94146035553Spatrick }
94246035553Spatrick 
94346035553Spatrick // frexp
94446035553Spatrick 
94546035553Spatrick #if !(defined(_AIX) || defined(__sun__))
94646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       frexp(float __lcpp_x, int* __lcpp_e) _NOEXCEPT       {return ::frexpf(__lcpp_x, __lcpp_e);}
94746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double frexp(long double __lcpp_x, int* __lcpp_e) _NOEXCEPT {return ::frexpl(__lcpp_x, __lcpp_e);}
94846035553Spatrick #endif
94946035553Spatrick 
95046035553Spatrick template <class _A1>
95146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
95246035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
95346035553Spatrick frexp(_A1 __lcpp_x, int* __lcpp_e) _NOEXCEPT {return ::frexp((double)__lcpp_x, __lcpp_e);}
95446035553Spatrick 
95546035553Spatrick // ldexp
95646035553Spatrick 
95746035553Spatrick #if !(defined(_AIX) || defined(__sun__))
95846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       ldexp(float __lcpp_x, int __lcpp_e) _NOEXCEPT       {return ::ldexpf(__lcpp_x, __lcpp_e);}
95946035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double ldexp(long double __lcpp_x, int __lcpp_e) _NOEXCEPT {return ::ldexpl(__lcpp_x, __lcpp_e);}
96046035553Spatrick #endif
96146035553Spatrick 
96246035553Spatrick template <class _A1>
96346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
96446035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
96546035553Spatrick ldexp(_A1 __lcpp_x, int __lcpp_e) _NOEXCEPT {return ::ldexp((double)__lcpp_x, __lcpp_e);}
96646035553Spatrick 
96746035553Spatrick // log
96846035553Spatrick 
96946035553Spatrick #if !(defined(_AIX) || defined(__sun__))
97046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       log(float __lcpp_x) _NOEXCEPT       {return ::logf(__lcpp_x);}
97146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double log(long double __lcpp_x) _NOEXCEPT {return ::logl(__lcpp_x);}
97246035553Spatrick #endif
97346035553Spatrick 
97446035553Spatrick template <class _A1>
97546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
97646035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
97746035553Spatrick log(_A1 __lcpp_x) _NOEXCEPT {return ::log((double)__lcpp_x);}
97846035553Spatrick 
97946035553Spatrick // log10
98046035553Spatrick 
98146035553Spatrick #if !(defined(_AIX) || defined(__sun__))
98246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       log10(float __lcpp_x) _NOEXCEPT       {return ::log10f(__lcpp_x);}
98346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double log10(long double __lcpp_x) _NOEXCEPT {return ::log10l(__lcpp_x);}
98446035553Spatrick #endif
98546035553Spatrick 
98646035553Spatrick template <class _A1>
98746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
98846035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
98946035553Spatrick log10(_A1 __lcpp_x) _NOEXCEPT {return ::log10((double)__lcpp_x);}
99046035553Spatrick 
99146035553Spatrick // modf
99246035553Spatrick 
99346035553Spatrick #if !(defined(_AIX) || defined(__sun__))
99446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       modf(float __lcpp_x, float* __lcpp_y) _NOEXCEPT             {return ::modff(__lcpp_x, __lcpp_y);}
99546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double modf(long double __lcpp_x, long double* __lcpp_y) _NOEXCEPT {return ::modfl(__lcpp_x, __lcpp_y);}
99646035553Spatrick #endif
99746035553Spatrick 
99846035553Spatrick // pow
99946035553Spatrick 
100046035553Spatrick #if !(defined(_AIX) || defined(__sun__))
100146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       pow(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::powf(__lcpp_x, __lcpp_y);}
100246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::powl(__lcpp_x, __lcpp_y);}
100346035553Spatrick #endif
100446035553Spatrick 
100546035553Spatrick template <class _A1, class _A2>
100646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
100746035553Spatrick typename std::_EnableIf
100846035553Spatrick <
100946035553Spatrick     std::is_arithmetic<_A1>::value &&
101046035553Spatrick     std::is_arithmetic<_A2>::value,
101146035553Spatrick     std::__promote<_A1, _A2>
101246035553Spatrick >::type
101346035553Spatrick pow(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
101446035553Spatrick {
101546035553Spatrick     typedef typename std::__promote<_A1, _A2>::type __result_type;
101646035553Spatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
101746035553Spatrick                      std::_IsSame<_A2, __result_type>::value)), "");
101846035553Spatrick     return ::pow((__result_type)__lcpp_x, (__result_type)__lcpp_y);
101946035553Spatrick }
102046035553Spatrick 
102146035553Spatrick // sin
102246035553Spatrick 
102346035553Spatrick #if !(defined(_AIX) || defined(__sun__))
102446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       sin(float __lcpp_x) _NOEXCEPT       {return ::sinf(__lcpp_x);}
102546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double sin(long double __lcpp_x) _NOEXCEPT {return ::sinl(__lcpp_x);}
102646035553Spatrick #endif
102746035553Spatrick 
102846035553Spatrick template <class _A1>
102946035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
103046035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
103146035553Spatrick sin(_A1 __lcpp_x) _NOEXCEPT {return ::sin((double)__lcpp_x);}
103246035553Spatrick 
103346035553Spatrick // sinh
103446035553Spatrick 
103546035553Spatrick #if !(defined(_AIX) || defined(__sun__))
103646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       sinh(float __lcpp_x) _NOEXCEPT       {return ::sinhf(__lcpp_x);}
103746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double sinh(long double __lcpp_x) _NOEXCEPT {return ::sinhl(__lcpp_x);}
103846035553Spatrick #endif
103946035553Spatrick 
104046035553Spatrick template <class _A1>
104146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
104246035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
104346035553Spatrick sinh(_A1 __lcpp_x) _NOEXCEPT {return ::sinh((double)__lcpp_x);}
104446035553Spatrick 
104546035553Spatrick // sqrt
104646035553Spatrick 
104746035553Spatrick #if !(defined(_AIX) || defined(__sun__))
104846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       sqrt(float __lcpp_x) _NOEXCEPT       {return ::sqrtf(__lcpp_x);}
104946035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __lcpp_x) _NOEXCEPT {return ::sqrtl(__lcpp_x);}
105046035553Spatrick #endif
105146035553Spatrick 
105246035553Spatrick template <class _A1>
105346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
105446035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
105546035553Spatrick sqrt(_A1 __lcpp_x) _NOEXCEPT {return ::sqrt((double)__lcpp_x);}
105646035553Spatrick 
105746035553Spatrick // tan
105846035553Spatrick 
105946035553Spatrick #if !(defined(_AIX) || defined(__sun__))
106046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       tan(float __lcpp_x) _NOEXCEPT       {return ::tanf(__lcpp_x);}
106146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double tan(long double __lcpp_x) _NOEXCEPT {return ::tanl(__lcpp_x);}
106246035553Spatrick #endif
106346035553Spatrick 
106446035553Spatrick template <class _A1>
106546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
106646035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
106746035553Spatrick tan(_A1 __lcpp_x) _NOEXCEPT {return ::tan((double)__lcpp_x);}
106846035553Spatrick 
106946035553Spatrick // tanh
107046035553Spatrick 
107146035553Spatrick #if !(defined(_AIX) || defined(__sun__))
107246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       tanh(float __lcpp_x) _NOEXCEPT       {return ::tanhf(__lcpp_x);}
107346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double tanh(long double __lcpp_x) _NOEXCEPT {return ::tanhl(__lcpp_x);}
107446035553Spatrick #endif
107546035553Spatrick 
107646035553Spatrick template <class _A1>
107746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
107846035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
107946035553Spatrick tanh(_A1 __lcpp_x) _NOEXCEPT {return ::tanh((double)__lcpp_x);}
108046035553Spatrick 
108146035553Spatrick // acosh
108246035553Spatrick 
108346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       acosh(float __lcpp_x) _NOEXCEPT       {return ::acoshf(__lcpp_x);}
108446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double acosh(long double __lcpp_x) _NOEXCEPT {return ::acoshl(__lcpp_x);}
108546035553Spatrick 
108646035553Spatrick template <class _A1>
108746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
108846035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
108946035553Spatrick acosh(_A1 __lcpp_x) _NOEXCEPT {return ::acosh((double)__lcpp_x);}
109046035553Spatrick 
109146035553Spatrick // asinh
109246035553Spatrick 
109346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       asinh(float __lcpp_x) _NOEXCEPT       {return ::asinhf(__lcpp_x);}
109446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double asinh(long double __lcpp_x) _NOEXCEPT {return ::asinhl(__lcpp_x);}
109546035553Spatrick 
109646035553Spatrick template <class _A1>
109746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
109846035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
109946035553Spatrick asinh(_A1 __lcpp_x) _NOEXCEPT {return ::asinh((double)__lcpp_x);}
110046035553Spatrick 
110146035553Spatrick // atanh
110246035553Spatrick 
110346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       atanh(float __lcpp_x) _NOEXCEPT       {return ::atanhf(__lcpp_x);}
110446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double atanh(long double __lcpp_x) _NOEXCEPT {return ::atanhl(__lcpp_x);}
110546035553Spatrick 
110646035553Spatrick template <class _A1>
110746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
110846035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
110946035553Spatrick atanh(_A1 __lcpp_x) _NOEXCEPT {return ::atanh((double)__lcpp_x);}
111046035553Spatrick 
111146035553Spatrick // cbrt
111246035553Spatrick 
111346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       cbrt(float __lcpp_x) _NOEXCEPT       {return ::cbrtf(__lcpp_x);}
111446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double cbrt(long double __lcpp_x) _NOEXCEPT {return ::cbrtl(__lcpp_x);}
111546035553Spatrick 
111646035553Spatrick template <class _A1>
111746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
111846035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
111946035553Spatrick cbrt(_A1 __lcpp_x) _NOEXCEPT {return ::cbrt((double)__lcpp_x);}
112046035553Spatrick 
112146035553Spatrick // copysign
112246035553Spatrick 
1123*a0747c9fSpatrick #if __has_builtin(__builtin_copysignf)
1124*a0747c9fSpatrick _LIBCPP_CONSTEXPR
1125*a0747c9fSpatrick #endif
1126*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY float __libcpp_copysign(float __lcpp_x, float __lcpp_y) _NOEXCEPT {
1127*a0747c9fSpatrick #if __has_builtin(__builtin_copysignf)
1128*a0747c9fSpatrick   return __builtin_copysignf(__lcpp_x, __lcpp_y);
1129*a0747c9fSpatrick #else
113046035553Spatrick   return ::copysignf(__lcpp_x, __lcpp_y);
1131*a0747c9fSpatrick #endif
113246035553Spatrick }
1133*a0747c9fSpatrick 
1134*a0747c9fSpatrick #if __has_builtin(__builtin_copysign)
1135*a0747c9fSpatrick _LIBCPP_CONSTEXPR
1136*a0747c9fSpatrick #endif
1137*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY double __libcpp_copysign(double __lcpp_x, double __lcpp_y) _NOEXCEPT {
1138*a0747c9fSpatrick #if __has_builtin(__builtin_copysign)
1139*a0747c9fSpatrick   return __builtin_copysign(__lcpp_x, __lcpp_y);
1140*a0747c9fSpatrick #else
1141*a0747c9fSpatrick   return ::copysign(__lcpp_x, __lcpp_y);
1142*a0747c9fSpatrick #endif
1143*a0747c9fSpatrick }
1144*a0747c9fSpatrick 
1145*a0747c9fSpatrick #if __has_builtin(__builtin_copysignl)
1146*a0747c9fSpatrick _LIBCPP_CONSTEXPR
1147*a0747c9fSpatrick #endif
1148*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long double __libcpp_copysign(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {
1149*a0747c9fSpatrick #if __has_builtin(__builtin_copysignl)
1150*a0747c9fSpatrick   return __builtin_copysignl(__lcpp_x, __lcpp_y);
1151*a0747c9fSpatrick #else
115246035553Spatrick   return ::copysignl(__lcpp_x, __lcpp_y);
1153*a0747c9fSpatrick #endif
1154*a0747c9fSpatrick }
1155*a0747c9fSpatrick 
1156*a0747c9fSpatrick template <class _A1, class _A2>
1157*a0747c9fSpatrick #if __has_builtin(__builtin_copysign)
1158*a0747c9fSpatrick _LIBCPP_CONSTEXPR
1159*a0747c9fSpatrick #endif
1160*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY
1161*a0747c9fSpatrick typename std::_EnableIf
1162*a0747c9fSpatrick <
1163*a0747c9fSpatrick     std::is_arithmetic<_A1>::value &&
1164*a0747c9fSpatrick     std::is_arithmetic<_A2>::value,
1165*a0747c9fSpatrick     std::__promote<_A1, _A2>
1166*a0747c9fSpatrick >::type
1167*a0747c9fSpatrick __libcpp_copysign(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT {
1168*a0747c9fSpatrick     typedef typename std::__promote<_A1, _A2>::type __result_type;
1169*a0747c9fSpatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
1170*a0747c9fSpatrick                      std::_IsSame<_A2, __result_type>::value)), "");
1171*a0747c9fSpatrick #if __has_builtin(__builtin_copysign)
1172*a0747c9fSpatrick     return __builtin_copysign((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1173*a0747c9fSpatrick #else
1174*a0747c9fSpatrick     return ::copysign((__result_type)__lcpp_x, (__result_type)__lcpp_y);
1175*a0747c9fSpatrick #endif
1176*a0747c9fSpatrick }
1177*a0747c9fSpatrick 
1178*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY float copysign(float __lcpp_x, float __lcpp_y) _NOEXCEPT {
1179*a0747c9fSpatrick   return ::__libcpp_copysign(__lcpp_x, __lcpp_y);
1180*a0747c9fSpatrick }
1181*a0747c9fSpatrick 
1182*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long double copysign(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {
1183*a0747c9fSpatrick   return ::__libcpp_copysign(__lcpp_x, __lcpp_y);
118446035553Spatrick }
118546035553Spatrick 
118646035553Spatrick template <class _A1, class _A2>
118746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
118846035553Spatrick typename std::_EnableIf
118946035553Spatrick <
119046035553Spatrick     std::is_arithmetic<_A1>::value &&
119146035553Spatrick     std::is_arithmetic<_A2>::value,
119246035553Spatrick     std::__promote<_A1, _A2>
119346035553Spatrick >::type
1194*a0747c9fSpatrick     copysign(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT {
1195*a0747c9fSpatrick   return ::__libcpp_copysign(__lcpp_x, __lcpp_y);
119646035553Spatrick }
119746035553Spatrick 
119846035553Spatrick // erf
119946035553Spatrick 
120046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       erf(float __lcpp_x) _NOEXCEPT       {return ::erff(__lcpp_x);}
120146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double erf(long double __lcpp_x) _NOEXCEPT {return ::erfl(__lcpp_x);}
120246035553Spatrick 
120346035553Spatrick template <class _A1>
120446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
120546035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
120646035553Spatrick erf(_A1 __lcpp_x) _NOEXCEPT {return ::erf((double)__lcpp_x);}
120746035553Spatrick 
120846035553Spatrick // erfc
120946035553Spatrick 
121046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       erfc(float __lcpp_x) _NOEXCEPT       {return ::erfcf(__lcpp_x);}
121146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double erfc(long double __lcpp_x) _NOEXCEPT {return ::erfcl(__lcpp_x);}
121246035553Spatrick 
121346035553Spatrick template <class _A1>
121446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
121546035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
121646035553Spatrick erfc(_A1 __lcpp_x) _NOEXCEPT {return ::erfc((double)__lcpp_x);}
121746035553Spatrick 
121846035553Spatrick // exp2
121946035553Spatrick 
122046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       exp2(float __lcpp_x) _NOEXCEPT       {return ::exp2f(__lcpp_x);}
122146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double exp2(long double __lcpp_x) _NOEXCEPT {return ::exp2l(__lcpp_x);}
122246035553Spatrick 
122346035553Spatrick template <class _A1>
122446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
122546035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
122646035553Spatrick exp2(_A1 __lcpp_x) _NOEXCEPT {return ::exp2((double)__lcpp_x);}
122746035553Spatrick 
122846035553Spatrick // expm1
122946035553Spatrick 
123046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       expm1(float __lcpp_x) _NOEXCEPT       {return ::expm1f(__lcpp_x);}
123146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double expm1(long double __lcpp_x) _NOEXCEPT {return ::expm1l(__lcpp_x);}
123246035553Spatrick 
123346035553Spatrick template <class _A1>
123446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
123546035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
123646035553Spatrick expm1(_A1 __lcpp_x) _NOEXCEPT {return ::expm1((double)__lcpp_x);}
123746035553Spatrick 
123846035553Spatrick // fdim
123946035553Spatrick 
124046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       fdim(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::fdimf(__lcpp_x, __lcpp_y);}
124146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double fdim(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fdiml(__lcpp_x, __lcpp_y);}
124246035553Spatrick 
124346035553Spatrick template <class _A1, class _A2>
124446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
124546035553Spatrick typename std::_EnableIf
124646035553Spatrick <
124746035553Spatrick     std::is_arithmetic<_A1>::value &&
124846035553Spatrick     std::is_arithmetic<_A2>::value,
124946035553Spatrick     std::__promote<_A1, _A2>
125046035553Spatrick >::type
125146035553Spatrick fdim(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
125246035553Spatrick {
125346035553Spatrick     typedef typename std::__promote<_A1, _A2>::type __result_type;
125446035553Spatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
125546035553Spatrick                      std::_IsSame<_A2, __result_type>::value)), "");
125646035553Spatrick     return ::fdim((__result_type)__lcpp_x, (__result_type)__lcpp_y);
125746035553Spatrick }
125846035553Spatrick 
125946035553Spatrick // fma
126046035553Spatrick 
1261*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY float       fma(float __lcpp_x, float __lcpp_y, float __lcpp_z) _NOEXCEPT
1262*a0747c9fSpatrick {
1263*a0747c9fSpatrick #if __has_builtin(__builtin_fmaf)
1264*a0747c9fSpatrick     return __builtin_fmaf(__lcpp_x, __lcpp_y, __lcpp_z);
1265*a0747c9fSpatrick #else
1266*a0747c9fSpatrick     return ::fmaf(__lcpp_x, __lcpp_y, __lcpp_z);
1267*a0747c9fSpatrick #endif
1268*a0747c9fSpatrick }
1269*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long double fma(long double __lcpp_x, long double __lcpp_y, long double __lcpp_z) _NOEXCEPT
1270*a0747c9fSpatrick {
1271*a0747c9fSpatrick #if __has_builtin(__builtin_fmal)
1272*a0747c9fSpatrick     return __builtin_fmal(__lcpp_x, __lcpp_y, __lcpp_z);
1273*a0747c9fSpatrick #else
1274*a0747c9fSpatrick     return ::fmal(__lcpp_x, __lcpp_y, __lcpp_z);
1275*a0747c9fSpatrick #endif
1276*a0747c9fSpatrick }
127746035553Spatrick 
127846035553Spatrick template <class _A1, class _A2, class _A3>
127946035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
128046035553Spatrick typename std::_EnableIf
128146035553Spatrick <
128246035553Spatrick     std::is_arithmetic<_A1>::value &&
128346035553Spatrick     std::is_arithmetic<_A2>::value &&
128446035553Spatrick     std::is_arithmetic<_A3>::value,
128546035553Spatrick     std::__promote<_A1, _A2, _A3>
128646035553Spatrick >::type
128746035553Spatrick fma(_A1 __lcpp_x, _A2 __lcpp_y, _A3 __lcpp_z) _NOEXCEPT
128846035553Spatrick {
128946035553Spatrick     typedef typename std::__promote<_A1, _A2, _A3>::type __result_type;
129046035553Spatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
129146035553Spatrick                      std::_IsSame<_A2, __result_type>::value &&
129246035553Spatrick                      std::_IsSame<_A3, __result_type>::value)), "");
1293*a0747c9fSpatrick #if __has_builtin(__builtin_fma)
1294*a0747c9fSpatrick     return __builtin_fma((__result_type)__lcpp_x, (__result_type)__lcpp_y, (__result_type)__lcpp_z);
1295*a0747c9fSpatrick #else
129646035553Spatrick     return ::fma((__result_type)__lcpp_x, (__result_type)__lcpp_y, (__result_type)__lcpp_z);
1297*a0747c9fSpatrick #endif
129846035553Spatrick }
129946035553Spatrick 
130046035553Spatrick // fmax
130146035553Spatrick 
130246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       fmax(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::fmaxf(__lcpp_x, __lcpp_y);}
130346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double fmax(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fmaxl(__lcpp_x, __lcpp_y);}
130446035553Spatrick 
130546035553Spatrick template <class _A1, class _A2>
130646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
130746035553Spatrick typename std::_EnableIf
130846035553Spatrick <
130946035553Spatrick     std::is_arithmetic<_A1>::value &&
131046035553Spatrick     std::is_arithmetic<_A2>::value,
131146035553Spatrick     std::__promote<_A1, _A2>
131246035553Spatrick >::type
131346035553Spatrick fmax(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
131446035553Spatrick {
131546035553Spatrick     typedef typename std::__promote<_A1, _A2>::type __result_type;
131646035553Spatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
131746035553Spatrick                      std::_IsSame<_A2, __result_type>::value)), "");
131846035553Spatrick     return ::fmax((__result_type)__lcpp_x, (__result_type)__lcpp_y);
131946035553Spatrick }
132046035553Spatrick 
132146035553Spatrick // fmin
132246035553Spatrick 
132346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       fmin(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::fminf(__lcpp_x, __lcpp_y);}
132446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double fmin(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fminl(__lcpp_x, __lcpp_y);}
132546035553Spatrick 
132646035553Spatrick template <class _A1, class _A2>
132746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
132846035553Spatrick typename std::_EnableIf
132946035553Spatrick <
133046035553Spatrick     std::is_arithmetic<_A1>::value &&
133146035553Spatrick     std::is_arithmetic<_A2>::value,
133246035553Spatrick     std::__promote<_A1, _A2>
133346035553Spatrick >::type
133446035553Spatrick fmin(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
133546035553Spatrick {
133646035553Spatrick     typedef typename std::__promote<_A1, _A2>::type __result_type;
133746035553Spatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
133846035553Spatrick                      std::_IsSame<_A2, __result_type>::value)), "");
133946035553Spatrick     return ::fmin((__result_type)__lcpp_x, (__result_type)__lcpp_y);
134046035553Spatrick }
134146035553Spatrick 
134246035553Spatrick // hypot
134346035553Spatrick 
134446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       hypot(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::hypotf(__lcpp_x, __lcpp_y);}
134546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double hypot(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::hypotl(__lcpp_x, __lcpp_y);}
134646035553Spatrick 
134746035553Spatrick template <class _A1, class _A2>
134846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
134946035553Spatrick typename std::_EnableIf
135046035553Spatrick <
135146035553Spatrick     std::is_arithmetic<_A1>::value &&
135246035553Spatrick     std::is_arithmetic<_A2>::value,
135346035553Spatrick     std::__promote<_A1, _A2>
135446035553Spatrick >::type
135546035553Spatrick hypot(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
135646035553Spatrick {
135746035553Spatrick     typedef typename std::__promote<_A1, _A2>::type __result_type;
135846035553Spatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
135946035553Spatrick                      std::_IsSame<_A2, __result_type>::value)), "");
136046035553Spatrick     return ::hypot((__result_type)__lcpp_x, (__result_type)__lcpp_y);
136146035553Spatrick }
136246035553Spatrick 
136346035553Spatrick // ilogb
136446035553Spatrick 
136546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY int ilogb(float __lcpp_x) _NOEXCEPT       {return ::ilogbf(__lcpp_x);}
136646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY int ilogb(long double __lcpp_x) _NOEXCEPT {return ::ilogbl(__lcpp_x);}
136746035553Spatrick 
136846035553Spatrick template <class _A1>
136946035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
137046035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, int>::type
137146035553Spatrick ilogb(_A1 __lcpp_x) _NOEXCEPT {return ::ilogb((double)__lcpp_x);}
137246035553Spatrick 
137346035553Spatrick // lgamma
137446035553Spatrick 
137546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       lgamma(float __lcpp_x) _NOEXCEPT       {return ::lgammaf(__lcpp_x);}
137646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double lgamma(long double __lcpp_x) _NOEXCEPT {return ::lgammal(__lcpp_x);}
137746035553Spatrick 
137846035553Spatrick template <class _A1>
137946035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
138046035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
138146035553Spatrick lgamma(_A1 __lcpp_x) _NOEXCEPT {return ::lgamma((double)__lcpp_x);}
138246035553Spatrick 
138346035553Spatrick // llrint
138446035553Spatrick 
1385*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long long llrint(float __lcpp_x) _NOEXCEPT
1386*a0747c9fSpatrick {
1387*a0747c9fSpatrick #if __has_builtin(__builtin_llrintf)
1388*a0747c9fSpatrick     return __builtin_llrintf(__lcpp_x);
1389*a0747c9fSpatrick #else
1390*a0747c9fSpatrick     return ::llrintf(__lcpp_x);
1391*a0747c9fSpatrick #endif
1392*a0747c9fSpatrick }
1393*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long long llrint(long double __lcpp_x) _NOEXCEPT
1394*a0747c9fSpatrick {
1395*a0747c9fSpatrick #if __has_builtin(__builtin_llrintl)
1396*a0747c9fSpatrick     return __builtin_llrintl(__lcpp_x);
1397*a0747c9fSpatrick #else
1398*a0747c9fSpatrick     return ::llrintl(__lcpp_x);
1399*a0747c9fSpatrick #endif
1400*a0747c9fSpatrick }
140146035553Spatrick 
140246035553Spatrick template <class _A1>
140346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
140446035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, long long>::type
1405*a0747c9fSpatrick llrint(_A1 __lcpp_x) _NOEXCEPT
1406*a0747c9fSpatrick {
1407*a0747c9fSpatrick #if __has_builtin(__builtin_llrint)
1408*a0747c9fSpatrick     return __builtin_llrint((double)__lcpp_x);
1409*a0747c9fSpatrick #else
1410*a0747c9fSpatrick     return ::llrint((double)__lcpp_x);
1411*a0747c9fSpatrick #endif
1412*a0747c9fSpatrick }
141346035553Spatrick 
141446035553Spatrick // llround
141546035553Spatrick 
1416*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long long llround(float __lcpp_x) _NOEXCEPT
1417*a0747c9fSpatrick {
1418*a0747c9fSpatrick #if __has_builtin(__builtin_llroundf)
1419*a0747c9fSpatrick     return __builtin_llroundf(__lcpp_x);
1420*a0747c9fSpatrick #else
1421*a0747c9fSpatrick     return ::llroundf(__lcpp_x);
1422*a0747c9fSpatrick #endif
1423*a0747c9fSpatrick }
1424*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long long llround(long double __lcpp_x) _NOEXCEPT
1425*a0747c9fSpatrick {
1426*a0747c9fSpatrick #if __has_builtin(__builtin_llroundl)
1427*a0747c9fSpatrick     return __builtin_llroundl(__lcpp_x);
1428*a0747c9fSpatrick #else
1429*a0747c9fSpatrick     return ::llroundl(__lcpp_x);
1430*a0747c9fSpatrick #endif
1431*a0747c9fSpatrick }
143246035553Spatrick 
143346035553Spatrick template <class _A1>
143446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
143546035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, long long>::type
1436*a0747c9fSpatrick llround(_A1 __lcpp_x) _NOEXCEPT
1437*a0747c9fSpatrick {
1438*a0747c9fSpatrick #if __has_builtin(__builtin_llround)
1439*a0747c9fSpatrick     return __builtin_llround((double)__lcpp_x);
1440*a0747c9fSpatrick #else
1441*a0747c9fSpatrick     return ::llround((double)__lcpp_x);
1442*a0747c9fSpatrick #endif
1443*a0747c9fSpatrick }
144446035553Spatrick 
144546035553Spatrick // log1p
144646035553Spatrick 
144746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       log1p(float __lcpp_x) _NOEXCEPT       {return ::log1pf(__lcpp_x);}
144846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double log1p(long double __lcpp_x) _NOEXCEPT {return ::log1pl(__lcpp_x);}
144946035553Spatrick 
145046035553Spatrick template <class _A1>
145146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
145246035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
145346035553Spatrick log1p(_A1 __lcpp_x) _NOEXCEPT {return ::log1p((double)__lcpp_x);}
145446035553Spatrick 
145546035553Spatrick // log2
145646035553Spatrick 
145746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       log2(float __lcpp_x) _NOEXCEPT       {return ::log2f(__lcpp_x);}
145846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double log2(long double __lcpp_x) _NOEXCEPT {return ::log2l(__lcpp_x);}
145946035553Spatrick 
146046035553Spatrick template <class _A1>
146146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
146246035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
146346035553Spatrick log2(_A1 __lcpp_x) _NOEXCEPT {return ::log2((double)__lcpp_x);}
146446035553Spatrick 
146546035553Spatrick // logb
146646035553Spatrick 
146746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       logb(float __lcpp_x) _NOEXCEPT       {return ::logbf(__lcpp_x);}
146846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double logb(long double __lcpp_x) _NOEXCEPT {return ::logbl(__lcpp_x);}
146946035553Spatrick 
147046035553Spatrick template <class _A1>
147146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
147246035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
147346035553Spatrick logb(_A1 __lcpp_x) _NOEXCEPT {return ::logb((double)__lcpp_x);}
147446035553Spatrick 
147546035553Spatrick // lrint
147646035553Spatrick 
1477*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long lrint(float __lcpp_x) _NOEXCEPT
1478*a0747c9fSpatrick {
1479*a0747c9fSpatrick #if __has_builtin(__builtin_lrintf)
1480*a0747c9fSpatrick     return __builtin_lrintf(__lcpp_x);
1481*a0747c9fSpatrick #else
1482*a0747c9fSpatrick     return ::lrintf(__lcpp_x);
1483*a0747c9fSpatrick #endif
1484*a0747c9fSpatrick }
1485*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long lrint(long double __lcpp_x) _NOEXCEPT
1486*a0747c9fSpatrick {
1487*a0747c9fSpatrick #if __has_builtin(__builtin_lrintl)
1488*a0747c9fSpatrick     return __builtin_lrintl(__lcpp_x);
1489*a0747c9fSpatrick #else
1490*a0747c9fSpatrick     return ::lrintl(__lcpp_x);
1491*a0747c9fSpatrick #endif
1492*a0747c9fSpatrick }
149346035553Spatrick 
149446035553Spatrick template <class _A1>
149546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
149646035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, long>::type
1497*a0747c9fSpatrick lrint(_A1 __lcpp_x) _NOEXCEPT
1498*a0747c9fSpatrick {
1499*a0747c9fSpatrick #if __has_builtin(__builtin_lrint)
1500*a0747c9fSpatrick     return __builtin_lrint((double)__lcpp_x);
1501*a0747c9fSpatrick #else
1502*a0747c9fSpatrick     return ::lrint((double)__lcpp_x);
1503*a0747c9fSpatrick #endif
1504*a0747c9fSpatrick }
150546035553Spatrick 
150646035553Spatrick // lround
150746035553Spatrick 
1508*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long lround(float __lcpp_x) _NOEXCEPT
1509*a0747c9fSpatrick {
1510*a0747c9fSpatrick #if __has_builtin(__builtin_lroundf)
1511*a0747c9fSpatrick     return __builtin_lroundf(__lcpp_x);
1512*a0747c9fSpatrick #else
1513*a0747c9fSpatrick     return ::lroundf(__lcpp_x);
1514*a0747c9fSpatrick #endif
1515*a0747c9fSpatrick }
1516*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long lround(long double __lcpp_x) _NOEXCEPT
1517*a0747c9fSpatrick {
1518*a0747c9fSpatrick #if __has_builtin(__builtin_lroundl)
1519*a0747c9fSpatrick     return __builtin_lroundl(__lcpp_x);
1520*a0747c9fSpatrick #else
1521*a0747c9fSpatrick     return ::lroundl(__lcpp_x);
1522*a0747c9fSpatrick #endif
1523*a0747c9fSpatrick }
152446035553Spatrick 
152546035553Spatrick template <class _A1>
152646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
152746035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, long>::type
1528*a0747c9fSpatrick lround(_A1 __lcpp_x) _NOEXCEPT
1529*a0747c9fSpatrick {
1530*a0747c9fSpatrick #if __has_builtin(__builtin_lround)
1531*a0747c9fSpatrick     return __builtin_lround((double)__lcpp_x);
1532*a0747c9fSpatrick #else
1533*a0747c9fSpatrick     return ::lround((double)__lcpp_x);
1534*a0747c9fSpatrick #endif
1535*a0747c9fSpatrick }
153646035553Spatrick 
153746035553Spatrick // nan
153846035553Spatrick 
153946035553Spatrick // nearbyint
154046035553Spatrick 
154146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       nearbyint(float __lcpp_x) _NOEXCEPT       {return ::nearbyintf(__lcpp_x);}
154246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double nearbyint(long double __lcpp_x) _NOEXCEPT {return ::nearbyintl(__lcpp_x);}
154346035553Spatrick 
154446035553Spatrick template <class _A1>
154546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
154646035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
154746035553Spatrick nearbyint(_A1 __lcpp_x) _NOEXCEPT {return ::nearbyint((double)__lcpp_x);}
154846035553Spatrick 
154946035553Spatrick // nextafter
155046035553Spatrick 
155146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       nextafter(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::nextafterf(__lcpp_x, __lcpp_y);}
155246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double nextafter(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::nextafterl(__lcpp_x, __lcpp_y);}
155346035553Spatrick 
155446035553Spatrick template <class _A1, class _A2>
155546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
155646035553Spatrick typename std::_EnableIf
155746035553Spatrick <
155846035553Spatrick     std::is_arithmetic<_A1>::value &&
155946035553Spatrick     std::is_arithmetic<_A2>::value,
156046035553Spatrick     std::__promote<_A1, _A2>
156146035553Spatrick >::type
156246035553Spatrick nextafter(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
156346035553Spatrick {
156446035553Spatrick     typedef typename std::__promote<_A1, _A2>::type __result_type;
156546035553Spatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
156646035553Spatrick                      std::_IsSame<_A2, __result_type>::value)), "");
156746035553Spatrick     return ::nextafter((__result_type)__lcpp_x, (__result_type)__lcpp_y);
156846035553Spatrick }
156946035553Spatrick 
157046035553Spatrick // nexttoward
157146035553Spatrick 
157246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       nexttoward(float __lcpp_x, long double __lcpp_y) _NOEXCEPT       {return ::nexttowardf(__lcpp_x, __lcpp_y);}
157346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double nexttoward(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::nexttowardl(__lcpp_x, __lcpp_y);}
157446035553Spatrick 
157546035553Spatrick template <class _A1>
157646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
157746035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
157846035553Spatrick nexttoward(_A1 __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::nexttoward((double)__lcpp_x, __lcpp_y);}
157946035553Spatrick 
158046035553Spatrick // remainder
158146035553Spatrick 
158246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       remainder(float __lcpp_x, float __lcpp_y) _NOEXCEPT             {return ::remainderf(__lcpp_x, __lcpp_y);}
158346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double remainder(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::remainderl(__lcpp_x, __lcpp_y);}
158446035553Spatrick 
158546035553Spatrick template <class _A1, class _A2>
158646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
158746035553Spatrick typename std::_EnableIf
158846035553Spatrick <
158946035553Spatrick     std::is_arithmetic<_A1>::value &&
159046035553Spatrick     std::is_arithmetic<_A2>::value,
159146035553Spatrick     std::__promote<_A1, _A2>
159246035553Spatrick >::type
159346035553Spatrick remainder(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
159446035553Spatrick {
159546035553Spatrick     typedef typename std::__promote<_A1, _A2>::type __result_type;
159646035553Spatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
159746035553Spatrick                      std::_IsSame<_A2, __result_type>::value)), "");
159846035553Spatrick     return ::remainder((__result_type)__lcpp_x, (__result_type)__lcpp_y);
159946035553Spatrick }
160046035553Spatrick 
160146035553Spatrick // remquo
160246035553Spatrick 
160346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       remquo(float __lcpp_x, float __lcpp_y, int* __lcpp_z) _NOEXCEPT             {return ::remquof(__lcpp_x, __lcpp_y, __lcpp_z);}
160446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double remquo(long double __lcpp_x, long double __lcpp_y, int* __lcpp_z) _NOEXCEPT {return ::remquol(__lcpp_x, __lcpp_y, __lcpp_z);}
160546035553Spatrick 
160646035553Spatrick template <class _A1, class _A2>
160746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
160846035553Spatrick typename std::_EnableIf
160946035553Spatrick <
161046035553Spatrick     std::is_arithmetic<_A1>::value &&
161146035553Spatrick     std::is_arithmetic<_A2>::value,
161246035553Spatrick     std::__promote<_A1, _A2>
161346035553Spatrick >::type
161446035553Spatrick remquo(_A1 __lcpp_x, _A2 __lcpp_y, int* __lcpp_z) _NOEXCEPT
161546035553Spatrick {
161646035553Spatrick     typedef typename std::__promote<_A1, _A2>::type __result_type;
161746035553Spatrick     static_assert((!(std::_IsSame<_A1, __result_type>::value &&
161846035553Spatrick                      std::_IsSame<_A2, __result_type>::value)), "");
161946035553Spatrick     return ::remquo((__result_type)__lcpp_x, (__result_type)__lcpp_y, __lcpp_z);
162046035553Spatrick }
162146035553Spatrick 
162246035553Spatrick // rint
162346035553Spatrick 
1624*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY float       rint(float __lcpp_x) _NOEXCEPT
1625*a0747c9fSpatrick {
1626*a0747c9fSpatrick #if __has_builtin(__builtin_rintf)
1627*a0747c9fSpatrick     return __builtin_rintf(__lcpp_x);
1628*a0747c9fSpatrick #else
1629*a0747c9fSpatrick     return ::rintf(__lcpp_x);
1630*a0747c9fSpatrick #endif
1631*a0747c9fSpatrick }
1632*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long double rint(long double __lcpp_x) _NOEXCEPT
1633*a0747c9fSpatrick {
1634*a0747c9fSpatrick #if __has_builtin(__builtin_rintl)
1635*a0747c9fSpatrick     return __builtin_rintl(__lcpp_x);
1636*a0747c9fSpatrick #else
1637*a0747c9fSpatrick     return ::rintl(__lcpp_x);
1638*a0747c9fSpatrick #endif
1639*a0747c9fSpatrick }
164046035553Spatrick 
164146035553Spatrick template <class _A1>
164246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
164346035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
1644*a0747c9fSpatrick rint(_A1 __lcpp_x) _NOEXCEPT
1645*a0747c9fSpatrick {
1646*a0747c9fSpatrick #if __has_builtin(__builtin_rint)
1647*a0747c9fSpatrick     return __builtin_rint((double)__lcpp_x);
1648*a0747c9fSpatrick #else
1649*a0747c9fSpatrick     return ::rint((double)__lcpp_x);
1650*a0747c9fSpatrick #endif
1651*a0747c9fSpatrick }
165246035553Spatrick 
165346035553Spatrick // round
165446035553Spatrick 
1655*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY float       round(float __lcpp_x) _NOEXCEPT
1656*a0747c9fSpatrick {
1657*a0747c9fSpatrick #if __has_builtin(__builtin_round)
1658*a0747c9fSpatrick     return __builtin_round(__lcpp_x);
1659*a0747c9fSpatrick #else
1660*a0747c9fSpatrick     return ::round(__lcpp_x);
1661*a0747c9fSpatrick #endif
1662*a0747c9fSpatrick }
1663*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long double round(long double __lcpp_x) _NOEXCEPT
1664*a0747c9fSpatrick {
1665*a0747c9fSpatrick #if __has_builtin(__builtin_roundl)
1666*a0747c9fSpatrick     return __builtin_roundl(__lcpp_x);
1667*a0747c9fSpatrick #else
1668*a0747c9fSpatrick     return ::roundl(__lcpp_x);
1669*a0747c9fSpatrick #endif
1670*a0747c9fSpatrick }
167146035553Spatrick 
167246035553Spatrick template <class _A1>
167346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
167446035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
1675*a0747c9fSpatrick round(_A1 __lcpp_x) _NOEXCEPT
1676*a0747c9fSpatrick {
1677*a0747c9fSpatrick #if __has_builtin(__builtin_round)
1678*a0747c9fSpatrick     return __builtin_round((double)__lcpp_x);
1679*a0747c9fSpatrick #else
1680*a0747c9fSpatrick     return ::round((double)__lcpp_x);
1681*a0747c9fSpatrick #endif
1682*a0747c9fSpatrick }
168346035553Spatrick 
168446035553Spatrick // scalbln
168546035553Spatrick 
168646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       scalbln(float __lcpp_x, long __lcpp_y) _NOEXCEPT       {return ::scalblnf(__lcpp_x, __lcpp_y);}
168746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double scalbln(long double __lcpp_x, long __lcpp_y) _NOEXCEPT {return ::scalblnl(__lcpp_x, __lcpp_y);}
168846035553Spatrick 
168946035553Spatrick template <class _A1>
169046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
169146035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
169246035553Spatrick scalbln(_A1 __lcpp_x, long __lcpp_y) _NOEXCEPT {return ::scalbln((double)__lcpp_x, __lcpp_y);}
169346035553Spatrick 
169446035553Spatrick // scalbn
169546035553Spatrick 
169646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       scalbn(float __lcpp_x, int __lcpp_y) _NOEXCEPT       {return ::scalbnf(__lcpp_x, __lcpp_y);}
169746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double scalbn(long double __lcpp_x, int __lcpp_y) _NOEXCEPT {return ::scalbnl(__lcpp_x, __lcpp_y);}
169846035553Spatrick 
169946035553Spatrick template <class _A1>
170046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
170146035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
170246035553Spatrick scalbn(_A1 __lcpp_x, int __lcpp_y) _NOEXCEPT {return ::scalbn((double)__lcpp_x, __lcpp_y);}
170346035553Spatrick 
170446035553Spatrick // tgamma
170546035553Spatrick 
170646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY float       tgamma(float __lcpp_x) _NOEXCEPT       {return ::tgammaf(__lcpp_x);}
170746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY long double tgamma(long double __lcpp_x) _NOEXCEPT {return ::tgammal(__lcpp_x);}
170846035553Spatrick 
170946035553Spatrick template <class _A1>
171046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
171146035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
171246035553Spatrick tgamma(_A1 __lcpp_x) _NOEXCEPT {return ::tgamma((double)__lcpp_x);}
171346035553Spatrick 
171446035553Spatrick // trunc
171546035553Spatrick 
1716*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY float       trunc(float __lcpp_x) _NOEXCEPT
1717*a0747c9fSpatrick {
1718*a0747c9fSpatrick #if __has_builtin(__builtin_trunc)
1719*a0747c9fSpatrick     return __builtin_trunc(__lcpp_x);
1720*a0747c9fSpatrick #else
1721*a0747c9fSpatrick     return ::trunc(__lcpp_x);
1722*a0747c9fSpatrick #endif
1723*a0747c9fSpatrick }
1724*a0747c9fSpatrick inline _LIBCPP_INLINE_VISIBILITY long double trunc(long double __lcpp_x) _NOEXCEPT
1725*a0747c9fSpatrick {
1726*a0747c9fSpatrick #if __has_builtin(__builtin_truncl)
1727*a0747c9fSpatrick     return __builtin_truncl(__lcpp_x);
1728*a0747c9fSpatrick #else
1729*a0747c9fSpatrick     return ::truncl(__lcpp_x);
1730*a0747c9fSpatrick #endif
1731*a0747c9fSpatrick }
173246035553Spatrick 
173346035553Spatrick template <class _A1>
173446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
173546035553Spatrick typename std::enable_if<std::is_integral<_A1>::value, double>::type
1736*a0747c9fSpatrick trunc(_A1 __lcpp_x) _NOEXCEPT
1737*a0747c9fSpatrick {
1738*a0747c9fSpatrick #if __has_builtin(__builtin_trunc)
1739*a0747c9fSpatrick     return __builtin_trunc((double)__lcpp_x);
1740*a0747c9fSpatrick #else
1741*a0747c9fSpatrick     return ::trunc((double)__lcpp_x);
1742*a0747c9fSpatrick #endif
1743*a0747c9fSpatrick }
174446035553Spatrick 
174546035553Spatrick } // extern "C++"
174646035553Spatrick 
174746035553Spatrick #endif // __cplusplus
174846035553Spatrick 
174946035553Spatrick #else // _LIBCPP_MATH_H
175046035553Spatrick 
175146035553Spatrick // This include lives outside the header guard in order to support an MSVC
175246035553Spatrick // extension which allows users to do:
175346035553Spatrick //
175446035553Spatrick // #define _USE_MATH_DEFINES
175546035553Spatrick // #include <math.h>
175646035553Spatrick //
175746035553Spatrick // and receive the definitions of mathematical constants, even if <math.h>
175846035553Spatrick // has previously been included.
175946035553Spatrick #if defined(_LIBCPP_MSVCRT) && defined(_USE_MATH_DEFINES)
176046035553Spatrick #include_next <math.h>
176146035553Spatrick #endif
176246035553Spatrick 
176346035553Spatrick #endif // _LIBCPP_MATH_H
1764