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