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