diff options
Diffstat (limited to 'system/include/libcxx/cmath')
-rw-r--r-- | system/include/libcxx/cmath | 585 |
1 files changed, 347 insertions, 238 deletions
diff --git a/system/include/libcxx/cmath b/system/include/libcxx/cmath index f8bc0dfc..bd603441 100644 --- a/system/include/libcxx/cmath +++ b/system/include/libcxx/cmath @@ -137,21 +137,21 @@ long double tanhl(long double x); // C99 -bool signbit(floating_point x); +bool signbit(arithmetic x); -int fpclassify(floating_point x); +int fpclassify(arithmetic x); -bool isfinite(floating_point x); -bool isinf(floating_point x); -bool isnan(floating_point x); -bool isnormal(floating_point x); +bool isfinite(arithmetic x); +bool isinf(arithmetic x); +bool isnan(arithmetic x); +bool isnormal(arithmetic x); -bool isgreater(floating_point x, floating_point y); -bool isgreaterequal(floating_point x, floating_point y); -bool isless(floating_point x, floating_point y); -bool islessequal(floating_point x, floating_point y); -bool islessgreater(floating_point x, floating_point y); -bool isunordered(floating_point x, floating_point y); +bool isgreater(arithmetic x, arithmetic y); +bool isgreaterequal(arithmetic x, arithmetic y); +bool isless(arithmetic x, arithmetic y); +bool islessequal(arithmetic x, arithmetic y); +bool islessgreater(arithmetic x, arithmetic y); +bool isunordered(arithmetic x, arithmetic y); floating_point acosh (arithmetic x); float acoshf(float x); @@ -301,7 +301,13 @@ long double truncl(long double x); #include <math.h> #include <type_traits> +#ifdef _MSC_VER +#include "support/win32/math_win32.h" +#endif + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) #pragma GCC system_header +#endif // signbit @@ -310,7 +316,7 @@ long double truncl(long double x); template <class _A1> _LIBCPP_ALWAYS_INLINE bool -__libcpp_signbit(_A1 __x) +__libcpp_signbit(_A1 __x) _NOEXCEPT { return signbit(__x); } @@ -319,10 +325,10 @@ __libcpp_signbit(_A1 __x) template <class _A1> inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type -signbit(_A1 __x) +typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type +signbit(_A1 __x) _NOEXCEPT { - return __libcpp_signbit(__x); + return __libcpp_signbit((typename std::__promote<_A1>::type)__x); } #endif // signbit @@ -334,7 +340,7 @@ signbit(_A1 __x) template <class _A1> _LIBCPP_ALWAYS_INLINE int -__libcpp_fpclassify(_A1 __x) +__libcpp_fpclassify(_A1 __x) _NOEXCEPT { return fpclassify(__x); } @@ -343,10 +349,10 @@ __libcpp_fpclassify(_A1 __x) template <class _A1> inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if<std::is_floating_point<_A1>::value, int>::type -fpclassify(_A1 __x) +typename std::enable_if<std::is_arithmetic<_A1>::value, int>::type +fpclassify(_A1 __x) _NOEXCEPT { - return __libcpp_fpclassify(__x); + return __libcpp_fpclassify((typename std::__promote<_A1>::type)__x); } #endif // fpclassify @@ -358,7 +364,7 @@ fpclassify(_A1 __x) template <class _A1> _LIBCPP_ALWAYS_INLINE bool -__libcpp_isfinite(_A1 __x) +__libcpp_isfinite(_A1 __x) _NOEXCEPT { return isfinite(__x); } @@ -367,10 +373,10 @@ __libcpp_isfinite(_A1 __x) template <class _A1> inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type -isfinite(_A1 __x) +typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type +isfinite(_A1 __x) _NOEXCEPT { - return __libcpp_isfinite(__x); + return __libcpp_isfinite((typename std::__promote<_A1>::type)__x); } #endif // isfinite @@ -382,7 +388,7 @@ isfinite(_A1 __x) template <class _A1> _LIBCPP_ALWAYS_INLINE bool -__libcpp_isinf(_A1 __x) +__libcpp_isinf(_A1 __x) _NOEXCEPT { return isinf(__x); } @@ -391,10 +397,10 @@ __libcpp_isinf(_A1 __x) template <class _A1> inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type -isinf(_A1 __x) +typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type +isinf(_A1 __x) _NOEXCEPT { - return __libcpp_isinf(__x); + return __libcpp_isinf((typename std::__promote<_A1>::type)__x); } #endif // isinf @@ -406,7 +412,7 @@ isinf(_A1 __x) template <class _A1> _LIBCPP_ALWAYS_INLINE bool -__libcpp_isnan(_A1 __x) +__libcpp_isnan(_A1 __x) _NOEXCEPT { return isnan(__x); } @@ -415,10 +421,10 @@ __libcpp_isnan(_A1 __x) template <class _A1> inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type -isnan(_A1 __x) +typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type +isnan(_A1 __x) _NOEXCEPT { - return __libcpp_isnan(__x); + return __libcpp_isnan((typename std::__promote<_A1>::type)__x); } #endif // isnan @@ -430,7 +436,7 @@ isnan(_A1 __x) template <class _A1> _LIBCPP_ALWAYS_INLINE bool -__libcpp_isnormal(_A1 __x) +__libcpp_isnormal(_A1 __x) _NOEXCEPT { return isnormal(__x); } @@ -439,10 +445,10 @@ __libcpp_isnormal(_A1 __x) template <class _A1> inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type -isnormal(_A1 __x) +typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type +isnormal(_A1 __x) _NOEXCEPT { - return __libcpp_isnormal(__x); + return __libcpp_isnormal((typename std::__promote<_A1>::type)__x); } #endif // isnormal @@ -454,7 +460,7 @@ isnormal(_A1 __x) template <class _A1, class _A2> _LIBCPP_ALWAYS_INLINE bool -__libcpp_isgreater(_A1 __x, _A2 __y) +__libcpp_isgreater(_A1 __x, _A2 __y) _NOEXCEPT { return isgreater(__x, __y); } @@ -465,13 +471,14 @@ template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY typename std::enable_if < - std::is_floating_point<_A1>::value && - std::is_floating_point<_A2>::value, + std::is_arithmetic<_A1>::value && + std::is_arithmetic<_A2>::value, bool >::type -isgreater(_A1 __x, _A2 __y) +isgreater(_A1 __x, _A2 __y) _NOEXCEPT { - return __libcpp_isgreater(__x, __y); + typedef typename std::__promote<_A1, _A2>::type type; + return __libcpp_isgreater((type)__x, (type)__y); } #endif // isgreater @@ -483,7 +490,7 @@ isgreater(_A1 __x, _A2 __y) template <class _A1, class _A2> _LIBCPP_ALWAYS_INLINE bool -__libcpp_isgreaterequal(_A1 __x, _A2 __y) +__libcpp_isgreaterequal(_A1 __x, _A2 __y) _NOEXCEPT { return isgreaterequal(__x, __y); } @@ -494,13 +501,14 @@ template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY typename std::enable_if < - std::is_floating_point<_A1>::value && - std::is_floating_point<_A2>::value, + std::is_arithmetic<_A1>::value && + std::is_arithmetic<_A2>::value, bool >::type -isgreaterequal(_A1 __x, _A2 __y) +isgreaterequal(_A1 __x, _A2 __y) _NOEXCEPT { - return __libcpp_isgreaterequal(__x, __y); + typedef typename std::__promote<_A1, _A2>::type type; + return __libcpp_isgreaterequal((type)__x, (type)__y); } #endif // isgreaterequal @@ -512,7 +520,7 @@ isgreaterequal(_A1 __x, _A2 __y) template <class _A1, class _A2> _LIBCPP_ALWAYS_INLINE bool -__libcpp_isless(_A1 __x, _A2 __y) +__libcpp_isless(_A1 __x, _A2 __y) _NOEXCEPT { return isless(__x, __y); } @@ -523,13 +531,14 @@ template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY typename std::enable_if < - std::is_floating_point<_A1>::value && - std::is_floating_point<_A2>::value, + std::is_arithmetic<_A1>::value && + std::is_arithmetic<_A2>::value, bool >::type -isless(_A1 __x, _A2 __y) +isless(_A1 __x, _A2 __y) _NOEXCEPT { - return __libcpp_isless(__x, __y); + typedef typename std::__promote<_A1, _A2>::type type; + return __libcpp_isless((type)__x, (type)__y); } #endif // isless @@ -541,7 +550,7 @@ isless(_A1 __x, _A2 __y) template <class _A1, class _A2> _LIBCPP_ALWAYS_INLINE bool -__libcpp_islessequal(_A1 __x, _A2 __y) +__libcpp_islessequal(_A1 __x, _A2 __y) _NOEXCEPT { return islessequal(__x, __y); } @@ -552,13 +561,14 @@ template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY typename std::enable_if < - std::is_floating_point<_A1>::value && - std::is_floating_point<_A2>::value, + std::is_arithmetic<_A1>::value && + std::is_arithmetic<_A2>::value, bool >::type -islessequal(_A1 __x, _A2 __y) +islessequal(_A1 __x, _A2 __y) _NOEXCEPT { - return __libcpp_islessequal(__x, __y); + typedef typename std::__promote<_A1, _A2>::type type; + return __libcpp_islessequal((type)__x, (type)__y); } #endif // islessequal @@ -570,7 +580,7 @@ islessequal(_A1 __x, _A2 __y) template <class _A1, class _A2> _LIBCPP_ALWAYS_INLINE bool -__libcpp_islessgreater(_A1 __x, _A2 __y) +__libcpp_islessgreater(_A1 __x, _A2 __y) _NOEXCEPT { return islessgreater(__x, __y); } @@ -581,13 +591,14 @@ template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY typename std::enable_if < - std::is_floating_point<_A1>::value && - std::is_floating_point<_A2>::value, + std::is_arithmetic<_A1>::value && + std::is_arithmetic<_A2>::value, bool >::type -islessgreater(_A1 __x, _A2 __y) +islessgreater(_A1 __x, _A2 __y) _NOEXCEPT { - return __libcpp_islessgreater(__x, __y); + typedef typename std::__promote<_A1, _A2>::type type; + return __libcpp_islessgreater((type)__x, (type)__y); } #endif // islessgreater @@ -599,7 +610,7 @@ islessgreater(_A1 __x, _A2 __y) template <class _A1, class _A2> _LIBCPP_ALWAYS_INLINE bool -__libcpp_isunordered(_A1 __x, _A2 __y) +__libcpp_isunordered(_A1 __x, _A2 __y) _NOEXCEPT { return isunordered(__x, __y); } @@ -610,13 +621,14 @@ template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY typename std::enable_if < - std::is_floating_point<_A1>::value && - std::is_floating_point<_A2>::value, + std::is_arithmetic<_A1>::value && + std::is_arithmetic<_A2>::value, bool >::type -isunordered(_A1 __x, _A2 __y) +isunordered(_A1 __x, _A2 __y) _NOEXCEPT { - return __libcpp_isunordered(__x, __y); + typedef typename std::__promote<_A1, _A2>::type type; + return __libcpp_isunordered((type)__x, (type)__y); } #endif // isunordered @@ -642,57 +654,74 @@ using ::double_t; // abs -template <class _A1> inline _LIBCPP_INLINE_VISIBILITY -typename enable_if<is_floating_point<_A1>::value, _A1>::type -abs(_A1 __x) {return fabs(__x);} +float +abs(float __x) _NOEXCEPT {return fabsf(__x);} + +inline _LIBCPP_INLINE_VISIBILITY +double +abs(double __x) _NOEXCEPT {return fabs(__x);} + +inline _LIBCPP_INLINE_VISIBILITY +long double +abs(long double __x) _NOEXCEPT {return fabsl(__x);} + +#ifndef __sun__ // acos using ::acos; using ::acosf; -inline _LIBCPP_INLINE_VISIBILITY float acos(float __x) {return acosf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double acos(long double __x) {return acosl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float acos(float __x) _NOEXCEPT {return acosf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double acos(long double __x) _NOEXCEPT {return acosl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -acos(_A1 __x) {return acos((double)__x);} +acos(_A1 __x) _NOEXCEPT {return acos((double)__x);} // asin using ::asin; using ::asinf; -inline _LIBCPP_INLINE_VISIBILITY float asin(float __x) {return asinf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double asin(long double __x) {return asinl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float asin(float __x) _NOEXCEPT {return asinf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double asin(long double __x) _NOEXCEPT {return asinl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -asin(_A1 __x) {return asin((double)__x);} +asin(_A1 __x) _NOEXCEPT {return asin((double)__x);} // atan using ::atan; using ::atanf; -inline _LIBCPP_INLINE_VISIBILITY float atan(float __x) {return atanf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double atan(long double __x) {return atanl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float atan(float __x) _NOEXCEPT {return atanf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double atan(long double __x) _NOEXCEPT {return atanl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -atan(_A1 __x) {return atan((double)__x);} +atan(_A1 __x) _NOEXCEPT {return atan((double)__x);} // atan2 using ::atan2; using ::atan2f; -inline _LIBCPP_INLINE_VISIBILITY float atan2(float __y, float __x) {return atan2f(__y, __x);} -inline _LIBCPP_INLINE_VISIBILITY long double atan2(long double __y, long double __x) {return atan2l(__y, __x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float atan2(float __y, float __x) _NOEXCEPT {return atan2f(__y, __x);} +inline _LIBCPP_INLINE_VISIBILITY long double atan2(long double __y, long double __x) _NOEXCEPT {return atan2l(__y, __x);} +#endif template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY @@ -702,7 +731,7 @@ typename enable_if is_arithmetic<_A2>::value, typename __promote<_A1, _A2>::type >::type -atan2(_A1 __y, _A2 __x) +atan2(_A1 __y, _A2 __x) _NOEXCEPT { typedef typename __promote<_A1, _A2>::type __result_type; static_assert((!(is_same<_A1, __result_type>::value && @@ -715,86 +744,106 @@ atan2(_A1 __y, _A2 __x) using ::ceil; using ::ceilf; -inline _LIBCPP_INLINE_VISIBILITY float ceil(float __x) {return ceilf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double ceil(long double __x) {return ceill(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float ceil(float __x) _NOEXCEPT {return ceilf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double ceil(long double __x) _NOEXCEPT {return ceill(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -ceil(_A1 __x) {return ceil((double)__x);} +ceil(_A1 __x) _NOEXCEPT {return ceil((double)__x);} // cos using ::cos; using ::cosf; -inline _LIBCPP_INLINE_VISIBILITY float cos(float __x) {return cosf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double cos(long double __x) {return cosl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float cos(float __x) _NOEXCEPT {return cosf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double cos(long double __x) _NOEXCEPT {return cosl(__x);} +#endif template <class _A1> inline _LIBCPP_ALWAYS_INLINE _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -cos(_A1 __x) {return cos((double)__x);} +cos(_A1 __x) _NOEXCEPT {return cos((double)__x);} // cosh using ::cosh; using ::coshf; -inline _LIBCPP_INLINE_VISIBILITY float cosh(float __x) {return coshf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double cosh(long double __x) {return coshl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float cosh(float __x) _NOEXCEPT {return coshf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double cosh(long double __x) _NOEXCEPT {return coshl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -cosh(_A1 __x) {return cosh((double)__x);} +cosh(_A1 __x) _NOEXCEPT {return cosh((double)__x);} +#endif // __sun__ // exp using ::exp; using ::expf; -inline _LIBCPP_INLINE_VISIBILITY float exp(float __x) {return expf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double exp(long double __x) {return expl(__x);} +#ifndef __sun__ + +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float exp(float __x) _NOEXCEPT {return expf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double exp(long double __x) _NOEXCEPT {return expl(__x);} +#endif + template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -exp(_A1 __x) {return exp((double)__x);} +exp(_A1 __x) _NOEXCEPT {return exp((double)__x);} // fabs using ::fabs; using ::fabsf; -inline _LIBCPP_INLINE_VISIBILITY float fabs(float __x) {return fabsf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double fabs(long double __x) {return fabsl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float fabs(float __x) _NOEXCEPT {return fabsf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double fabs(long double __x) _NOEXCEPT {return fabsl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -fabs(_A1 __x) {return fabs((double)__x);} +fabs(_A1 __x) _NOEXCEPT {return fabs((double)__x);} // floor using ::floor; using ::floorf; -inline _LIBCPP_INLINE_VISIBILITY float floor(float __x) {return floorf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double floor(long double __x) {return floorl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float floor(float __x) _NOEXCEPT {return floorf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double floor(long double __x) _NOEXCEPT {return floorl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -floor(_A1 __x) {return floor((double)__x);} +floor(_A1 __x) _NOEXCEPT {return floor((double)__x);} // fmod +#endif //__sun__ using ::fmod; using ::fmodf; +#ifndef __sun__ -inline _LIBCPP_INLINE_VISIBILITY float fmod(float __x, float __y) {return fmodf(__x, __y);} -inline _LIBCPP_INLINE_VISIBILITY long double fmod(long double __x, long double __y) {return fmodl(__x, __y);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float fmod(float __x, float __y) _NOEXCEPT {return fmodf(__x, __y);} +inline _LIBCPP_INLINE_VISIBILITY long double fmod(long double __x, long double __y) _NOEXCEPT {return fmodl(__x, __y);} +#endif template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY @@ -804,7 +853,7 @@ typename enable_if is_arithmetic<_A2>::value, typename __promote<_A1, _A2>::type >::type -fmod(_A1 __x, _A2 __y) +fmod(_A1 __x, _A2 __y) _NOEXCEPT { typedef typename __promote<_A1, _A2>::type __result_type; static_assert((!(is_same<_A1, __result_type>::value && @@ -812,73 +861,92 @@ fmod(_A1 __x, _A2 __y) return fmod((__result_type)__x, (__result_type)__y); } + // frexp using ::frexp; using ::frexpf; -inline _LIBCPP_INLINE_VISIBILITY float frexp(float __x, int* __e) {return frexpf(__x, __e);} -inline _LIBCPP_INLINE_VISIBILITY long double frexp(long double __x, int* __e) {return frexpl(__x, __e);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float frexp(float __x, int* __e) _NOEXCEPT {return frexpf(__x, __e);} +inline _LIBCPP_INLINE_VISIBILITY long double frexp(long double __x, int* __e) _NOEXCEPT {return frexpl(__x, __e);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -frexp(_A1 __x, int* __e) {return frexp((double)__x, __e);} +frexp(_A1 __x, int* __e) _NOEXCEPT {return frexp((double)__x, __e);} // ldexp using ::ldexp; using ::ldexpf; -inline _LIBCPP_INLINE_VISIBILITY float ldexp(float __x, int __e) {return ldexpf(__x, __e);} -inline _LIBCPP_INLINE_VISIBILITY long double ldexp(long double __x, int __e) {return ldexpl(__x, __e);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float ldexp(float __x, int __e) _NOEXCEPT {return ldexpf(__x, __e);} +inline _LIBCPP_INLINE_VISIBILITY long double ldexp(long double __x, int __e) _NOEXCEPT {return ldexpl(__x, __e);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -ldexp(_A1 __x, int __e) {return ldexp((double)__x, __e);} +ldexp(_A1 __x, int __e) _NOEXCEPT {return ldexp((double)__x, __e);} // log +#endif // __sun__ using ::log; using ::logf; +#ifndef __sun__ -inline _LIBCPP_INLINE_VISIBILITY float log(float __x) {return logf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double log(long double __x) {return logl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float log(float __x) _NOEXCEPT {return logf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double log(long double __x) _NOEXCEPT {return logl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -log(_A1 __x) {return log((double)__x);} +log(_A1 __x) _NOEXCEPT {return log((double)__x);} + // log10 using ::log10; using ::log10f; -inline _LIBCPP_INLINE_VISIBILITY float log10(float __x) {return log10f(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double log10(long double __x) {return log10l(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float log10(float __x) _NOEXCEPT {return log10f(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double log10(long double __x) _NOEXCEPT {return log10l(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -log10(_A1 __x) {return log10((double)__x);} +log10(_A1 __x) _NOEXCEPT {return log10((double)__x);} // modf using ::modf; using ::modff; -inline _LIBCPP_INLINE_VISIBILITY float modf(float __x, float* __y) {return modff(__x, __y);} -inline _LIBCPP_INLINE_VISIBILITY long double modf(long double __x, long double* __y) {return modfl(__x, __y);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float modf(float __x, float* __y) _NOEXCEPT {return modff(__x, __y);} +inline _LIBCPP_INLINE_VISIBILITY long double modf(long double __x, long double* __y) _NOEXCEPT {return modfl(__x, __y);} +#endif // pow +#endif // __sun__ using ::pow; using ::powf; -inline _LIBCPP_INLINE_VISIBILITY float pow(float __x, float __y) {return powf(__x, __y);} -inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __x, long double __y) {return powl(__x, __y);} +#ifndef __sun__ + +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float pow(float __x, float __y) _NOEXCEPT {return powf(__x, __y);} +inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __x, long double __y) _NOEXCEPT {return powl(__x, __y);} +#endif template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY @@ -888,7 +956,7 @@ typename enable_if is_arithmetic<_A2>::value, typename __promote<_A1, _A2>::type >::type -pow(_A1 __x, _A2 __y) +pow(_A1 __x, _A2 __y) _NOEXCEPT { typedef typename __promote<_A1, _A2>::type __result_type; static_assert((!(is_same<_A1, __result_type>::value && @@ -896,130 +964,152 @@ pow(_A1 __x, _A2 __y) return pow((__result_type)__x, (__result_type)__y); } + // sin using ::sin; using ::sinf; -inline _LIBCPP_INLINE_VISIBILITY float sin(float __x) {return sinf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double sin(long double __x) {return sinl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float sin(float __x) _NOEXCEPT {return sinf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double sin(long double __x) _NOEXCEPT {return sinl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -sin(_A1 __x) {return sin((double)__x);} +sin(_A1 __x) _NOEXCEPT {return sin((double)__x);} // sinh using ::sinh; using ::sinhf; -inline _LIBCPP_INLINE_VISIBILITY float sinh(float __x) {return sinhf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double sinh(long double __x) {return sinhl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float sinh(float __x) _NOEXCEPT {return sinhf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double sinh(long double __x) _NOEXCEPT {return sinhl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -sinh(_A1 __x) {return sinh((double)__x);} +sinh(_A1 __x) _NOEXCEPT {return sinh((double)__x);} // sqrt +#endif // __sun__ using ::sqrt; using ::sqrtf; -inline _LIBCPP_INLINE_VISIBILITY float sqrt(float __x) {return sqrtf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __x) {return sqrtl(__x);} + +#if !(defined(_MSC_VER) || defined(__sun__)) +inline _LIBCPP_INLINE_VISIBILITY float sqrt(float __x) _NOEXCEPT {return sqrtf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __x) _NOEXCEPT {return sqrtl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -sqrt(_A1 __x) {return sqrt((double)__x);} +sqrt(_A1 __x) _NOEXCEPT {return sqrt((double)__x);} // tan using ::tan; using ::tanf; +#ifndef __sun__ -inline _LIBCPP_INLINE_VISIBILITY float tan(float __x) {return tanf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double tan(long double __x) {return tanl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float tan(float __x) _NOEXCEPT {return tanf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double tan(long double __x) _NOEXCEPT {return tanl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -tan(_A1 __x) {return tan((double)__x);} +tan(_A1 __x) _NOEXCEPT {return tan((double)__x);} // tanh using ::tanh; using ::tanhf; -inline _LIBCPP_INLINE_VISIBILITY float tanh(float __x) {return tanhf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double tanh(long double __x) {return tanhl(__x);} +#ifndef _MSC_VER +inline _LIBCPP_INLINE_VISIBILITY float tanh(float __x) _NOEXCEPT {return tanhf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double tanh(long double __x) _NOEXCEPT {return tanhl(__x);} +#endif template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -tanh(_A1 __x) {return tanh((double)__x);} +tanh(_A1 __x) _NOEXCEPT {return tanh((double)__x);} // acosh +#ifndef _MSC_VER using ::acosh; using ::acoshf; -inline _LIBCPP_INLINE_VISIBILITY float acosh(float __x) {return acoshf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double acosh(long double __x) {return acoshl(__x);} +inline _LIBCPP_INLINE_VISIBILITY float acosh(float __x) _NOEXCEPT {return acoshf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double acosh(long double __x) _NOEXCEPT {return acoshl(__x);} template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -acosh(_A1 __x) {return acosh((double)__x);} +acosh(_A1 __x) _NOEXCEPT {return acosh((double)__x);} +#endif // asinh +#ifndef _MSC_VER using ::asinh; using ::asinhf; -inline _LIBCPP_INLINE_VISIBILITY float asinh(float __x) {return asinhf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double asinh(long double __x) {return asinhl(__x);} +inline _LIBCPP_INLINE_VISIBILITY float asinh(float __x) _NOEXCEPT {return asinhf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double asinh(long double __x) _NOEXCEPT {return asinhl(__x);} template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -asinh(_A1 __x) {return asinh((double)__x);} +asinh(_A1 __x) _NOEXCEPT {return asinh((double)__x);} +#endif // atanh +#ifndef _MSC_VER using ::atanh; using ::atanhf; -inline _LIBCPP_INLINE_VISIBILITY float atanh(float __x) {return atanhf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double atanh(long double __x) {return atanhl(__x);} +inline _LIBCPP_INLINE_VISIBILITY float atanh(float __x) _NOEXCEPT {return atanhf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double atanh(long double __x) _NOEXCEPT {return atanhl(__x);} template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -atanh(_A1 __x) {return atanh((double)__x);} +atanh(_A1 __x) _NOEXCEPT {return atanh((double)__x);} +#endif // cbrt +#ifndef _MSC_VER using ::cbrt; using ::cbrtf; -inline _LIBCPP_INLINE_VISIBILITY float cbrt(float __x) {return cbrtf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double cbrt(long double __x) {return cbrtl(__x);} +inline _LIBCPP_INLINE_VISIBILITY float cbrt(float __x) _NOEXCEPT {return cbrtf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double cbrt(long double __x) _NOEXCEPT {return cbrtl(__x);} template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -cbrt(_A1 __x) {return cbrt((double)__x);} +cbrt(_A1 __x) _NOEXCEPT {return cbrt((double)__x);} +#endif // copysign using ::copysign; using ::copysignf; -inline _LIBCPP_INLINE_VISIBILITY float copysign(float __x, float __y) {return copysignf(__x, __y);} -inline _LIBCPP_INLINE_VISIBILITY long double copysign(long double __x, long double __y) {return copysignl(__x, __y);} +inline _LIBCPP_INLINE_VISIBILITY float copysign(float __x, float __y) _NOEXCEPT {return copysignf(__x, __y);} +inline _LIBCPP_INLINE_VISIBILITY long double copysign(long double __x, long double __y) _NOEXCEPT {return copysignl(__x, __y);} template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY @@ -1029,7 +1119,7 @@ typename enable_if is_arithmetic<_A2>::value, typename __promote<_A1, _A2>::type >::type -copysign(_A1 __x, _A2 __y) +copysign(_A1 __x, _A2 __y) _NOEXCEPT { typedef typename __promote<_A1, _A2>::type __result_type; static_assert((!(is_same<_A1, __result_type>::value && @@ -1037,65 +1127,67 @@ copysign(_A1 __x, _A2 __y) return copysign((__result_type)__x, (__result_type)__y); } +#ifndef _MSC_VER + // erf using ::erf; using ::erff; -inline _LIBCPP_INLINE_VISIBILITY float erf(float __x) {return erff(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double erf(long double __x) {return erfl(__x);} +inline _LIBCPP_INLINE_VISIBILITY float erf(float __x) _NOEXCEPT {return erff(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double erf(long double __x) _NOEXCEPT {return erfl(__x);} template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -erf(_A1 __x) {return erf((double)__x);} +erf(_A1 __x) _NOEXCEPT {return erf((double)__x);} // erfc using ::erfc; using ::erfcf; -inline _LIBCPP_INLINE_VISIBILITY float erfc(float __x) {return erfcf(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double erfc(long double __x) {return erfcl(__x);} +inline _LIBCPP_INLINE_VISIBILITY float erfc(float __x) _NOEXCEPT {return erfcf(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double erfc(long double __x) _NOEXCEPT {return erfcl(__x);} template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -erfc(_A1 __x) {return erfc((double)__x);} +erfc(_A1 __x) _NOEXCEPT {return erfc((double)__x);} // exp2 using ::exp2; using ::exp2f; -inline _LIBCPP_INLINE_VISIBILITY float exp2(float __x) {return exp2f(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double exp2(long double __x) {return exp2l(__x);} +inline _LIBCPP_INLINE_VISIBILITY float exp2(float __x) _NOEXCEPT {return exp2f(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double exp2(long double __x) _NOEXCEPT {return exp2l(__x);} template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -exp2(_A1 __x) {return exp2((double)__x);} +exp2(_A1 __x) _NOEXCEPT {return exp2((double)__x);} // expm1 using ::expm1; using ::expm1f; -inline _LIBCPP_INLINE_VISIBILITY float expm1(float __x) {return expm1f(__x);} -inline _LIBCPP_INLINE_VISIBILITY long double expm1(long double __x) {return expm1l(__x);} +inline _LIBCPP_INLINE_VISIBILITY float expm1(float __x) _NOEXCEPT {return expm1f(__x);} +inline _LIBCPP_INLINE_VISIBILITY long double expm1(long double __x) _NOEXCEPT {return expm1l(__x);} template <class _A1> inline _LIBCPP_INLINE_VISIBILITY typename enable_if<is_integral<_A1>::value, double>::type -expm1(_A1 __x) {return expm1((double)__x);} +expm1(_A1 __x) _NOEXCEPT {return expm1((double)__x);} // fdim using ::fdim; using ::fdimf; -inline _LIBCPP_INLINE_VISIBILITY float fdim(float __x, float __y) {return fdimf(__x, __y);} -inline _LIBCPP_INLINE_VISIBILITY long double fdim(long double __x, long double __y) {return fdiml(__x, __y);} +inline _LIBCPP_INLINE_VISIBILITY float fdim(float __x, float __y) _NOEXCEPT {return fdimf(__x, __y);} +inline _LIBCPP_INLINE_VISIBILITY long double fdim(long double __x, long double __y) _NOEXCEPT {return fdiml(__x, __y);} template <class _A1, class _A2> inline _LIBCPP_INLINE_VISIBILITY @@ -1105,7 +1197,7 @@ typename enable_if is_arithmetic<_A2>::value, typename __promote<_A1, _A2>::type >::type -fdim(_A1 __x, _A2 __y) +fdim(_A1 __x, _A2 __y) _NOEXCEPT { typedef typename __promote<_A1, _A2>::type __result_type; static_assert((!(is_same<_A1, __result_type>::value && @@ -1115,13 +1207,15 @@ fdim(_A1 __x, _A2 __y) // fma -inline _LIBCPP_INLINE_VISIBILITY float fmaf(float __x, float __y, float __z) {return (float)((double)__x*__y + __z);} +inline _LIBCPP_INLINE_VISIBILITY float fmaf(float __x, float __y, float __z) _NOEXCEPT {return (float)((double)__x*__y + __z);} +#ifndef FP_FAST_FMAF #define FP_FAST_FMAF +#endif using ::fma; -inline _LIBCPP_INLINE_VISIBILITY float fma(float __x, float __y, float __z) {return fmaf(__x, __y, __z);} -inline _LIBCPP_INLINE_VISIBILITY long double fma(long double __x, long double __y, long double __z) {return fmal(__x, __y, __z);} +inline _LIBCPP_INLINE_VISIBILITY float fma(float __x, float __y, float __z) _NOEXCEPT {return fmaf(__x, __y, __z);} +inline _LIBCPP_INLINE_VISIBILITY long double fma(long double __x, long double __y, long double __z) _NOEXCEPT {return fmal(__x, __y, __z);} template <class _A1, class _A2, class _A3> inline _LIBCPP_INLINE_VISIBILITY @@ -1132,7 +1226,7 @@ typename enable_if is_arithmetic<_A3>::value, typename __promote<_A1, _A2, _A3>::type >::type -fma(_A1 __x, _A2 __y, _A3 __z) +fma(_A1 __x, _A2 __y, _A3 __z) _NOEXCEPT { typedef typename __promote<_A1, _A2, _A3>::type __result_type; static_assert((!(is_same<_A1, __result_type>::value && @@ -1146,8 +1240,8 @@ fma(_A1 __x, _A2 __y, _A3 __z) using ::fmax; using ::fmaxf; -inline _LIBCPP_INLINE_VISIBILITY float fmax(float __x, float __y) {return fmaxf(__x, __y);} -inline _LIBCPP_INLINE_VISIBILITY long double fmax(long double __x, long d |