1 // -*- C++ -*- 2 //===---------------------------- cmath -----------------------------------===// 3 // 4 // The LLVM Compiler Infrastructure 5 // 6 // This file is dual licensed under the MIT and the University of Illinois Open 7 // Source Licenses. See LICENSE.TXT for details. 8 // 9 //===----------------------------------------------------------------------===// 10 11 #ifndef _LIBCPP_CMATH 12 #define _LIBCPP_CMATH 13 14 /* 15 cmath synopsis 16 17 Macros: 18 19 HUGE_VAL 20 HUGE_VALF // C99 21 HUGE_VALL // C99 22 INFINITY // C99 23 NAN // C99 24 FP_INFINITE // C99 25 FP_NAN // C99 26 FP_NORMAL // C99 27 FP_SUBNORMAL // C99 28 FP_ZERO // C99 29 FP_FAST_FMA // C99 30 FP_FAST_FMAF // C99 31 FP_FAST_FMAL // C99 32 FP_ILOGB0 // C99 33 FP_ILOGBNAN // C99 34 MATH_ERRNO // C99 35 MATH_ERREXCEPT // C99 36 math_errhandling // C99 37 38 namespace std 39 { 40 41 Types: 42 43 float_t // C99 44 double_t // C99 45 46 // C90 47 48 floating_point abs(floating_point x); 49 50 floating_point acos (arithmetic x); 51 float acosf(float x); 52 long double acosl(long double x); 53 54 floating_point asin (arithmetic x); 55 float asinf(float x); 56 long double asinl(long double x); 57 58 floating_point atan (arithmetic x); 59 float atanf(float x); 60 long double atanl(long double x); 61 62 floating_point atan2 (arithmetic y, arithmetic x); 63 float atan2f(float y, float x); 64 long double atan2l(long double y, long double x); 65 66 floating_point ceil (arithmetic x); 67 float ceilf(float x); 68 long double ceill(long double x); 69 70 floating_point cos (arithmetic x); 71 float cosf(float x); 72 long double cosl(long double x); 73 74 floating_point cosh (arithmetic x); 75 float coshf(float x); 76 long double coshl(long double x); 77 78 floating_point exp (arithmetic x); 79 float expf(float x); 80 long double expl(long double x); 81 82 floating_point fabs (arithmetic x); 83 float fabsf(float x); 84 long double fabsl(long double x); 85 86 floating_point floor (arithmetic x); 87 float floorf(float x); 88 long double floorl(long double x); 89 90 floating_point fmod (arithmetic x, arithmetic y); 91 float fmodf(float x, float y); 92 long double fmodl(long double x, long double y); 93 94 floating_point frexp (arithmetic value, int* exp); 95 float frexpf(float value, int* exp); 96 long double frexpl(long double value, int* exp); 97 98 floating_point ldexp (arithmetic value, int exp); 99 float ldexpf(float value, int exp); 100 long double ldexpl(long double value, int exp); 101 102 floating_point log (arithmetic x); 103 float logf(float x); 104 long double logl(long double x); 105 106 floating_point log10 (arithmetic x); 107 float log10f(float x); 108 long double log10l(long double x); 109 110 floating_point modf (floating_point value, floating_point* iptr); 111 float modff(float value, float* iptr); 112 long double modfl(long double value, long double* iptr); 113 114 floating_point pow (arithmetic x, arithmetic y); 115 float powf(float x, float y); 116 long double powl(long double x, long double y); 117 118 floating_point sin (arithmetic x); 119 float sinf(float x); 120 long double sinl(long double x); 121 122 floating_point sinh (arithmetic x); 123 float sinhf(float x); 124 long double sinhl(long double x); 125 126 floating_point sqrt (arithmetic x); 127 float sqrtf(float x); 128 long double sqrtl(long double x); 129 130 floating_point tan (arithmetic x); 131 float tanf(float x); 132 long double tanl(long double x); 133 134 floating_point tanh (arithmetic x); 135 float tanhf(float x); 136 long double tanhl(long double x); 137 138 // C99 139 140 bool signbit(arithmetic x); 141 142 int fpclassify(arithmetic x); 143 144 bool isfinite(arithmetic x); 145 bool isinf(arithmetic x); 146 bool isnan(arithmetic x); 147 bool isnormal(arithmetic x); 148 149 bool isgreater(arithmetic x, arithmetic y); 150 bool isgreaterequal(arithmetic x, arithmetic y); 151 bool isless(arithmetic x, arithmetic y); 152 bool islessequal(arithmetic x, arithmetic y); 153 bool islessgreater(arithmetic x, arithmetic y); 154 bool isunordered(arithmetic x, arithmetic y); 155 156 floating_point acosh (arithmetic x); 157 float acoshf(float x); 158 long double acoshl(long double x); 159 160 floating_point asinh (arithmetic x); 161 float asinhf(float x); 162 long double asinhl(long double x); 163 164 floating_point atanh (arithmetic x); 165 float atanhf(float x); 166 long double atanhl(long double x); 167 168 floating_point cbrt (arithmetic x); 169 float cbrtf(float x); 170 long double cbrtl(long double x); 171 172 floating_point copysign (arithmetic x, arithmetic y); 173 float copysignf(float x, float y); 174 long double copysignl(long double x, long double y); 175 176 floating_point erf (arithmetic x); 177 float erff(float x); 178 long double erfl(long double x); 179 180 floating_point erfc (arithmetic x); 181 float erfcf(float x); 182 long double erfcl(long double x); 183 184 floating_point exp2 (arithmetic x); 185 float exp2f(float x); 186 long double exp2l(long double x); 187 188 floating_point expm1 (arithmetic x); 189 float expm1f(float x); 190 long double expm1l(long double x); 191 192 floating_point fdim (arithmetic x, arithmetic y); 193 float fdimf(float x, float y); 194 long double fdiml(long double x, long double y); 195 196 floating_point fma (arithmetic x, arithmetic y, arithmetic z); 197 float fmaf(float x, float y, float z); 198 long double fmal(long double x, long double y, long double z); 199 200 floating_point fmax (arithmetic x, arithmetic y); 201 float fmaxf(float x, float y); 202 long double fmaxl(long double x, long double y); 203 204 floating_point fmin (arithmetic x, arithmetic y); 205 float fminf(float x, float y); 206 long double fminl(long double x, long double y); 207 208 floating_point hypot (arithmetic x, arithmetic y); 209 float hypotf(float x, float y); 210 long double hypotl(long double x, long double y); 211 212 int ilogb (arithmetic x); 213 int ilogbf(float x); 214 int ilogbl(long double x); 215 216 floating_point lgamma (arithmetic x); 217 float lgammaf(float x); 218 long double lgammal(long double x); 219 220 long long llrint (arithmetic x); 221 long long llrintf(float x); 222 long long llrintl(long double x); 223 224 long long llround (arithmetic x); 225 long long llroundf(float x); 226 long long llroundl(long double x); 227 228 floating_point log1p (arithmetic x); 229 float log1pf(float x); 230 long double log1pl(long double x); 231 232 floating_point log2 (arithmetic x); 233 float log2f(float x); 234 long double log2l(long double x); 235 236 floating_point logb (arithmetic x); 237 float logbf(float x); 238 long double logbl(long double x); 239 240 long lrint (arithmetic x); 241 long lrintf(float x); 242 long lrintl(long double x); 243 244 long lround (arithmetic x); 245 long lroundf(float x); 246 long lroundl(long double x); 247 248 double nan (const char* str); 249 float nanf(const char* str); 250 long double nanl(const char* str); 251 252 floating_point nearbyint (arithmetic x); 253 float nearbyintf(float x); 254 long double nearbyintl(long double x); 255 256 floating_point nextafter (arithmetic x, arithmetic y); 257 float nextafterf(float x, float y); 258 long double nextafterl(long double x, long double y); 259 260 floating_point nexttoward (arithmetic x, long double y); 261 float nexttowardf(float x, long double y); 262 long double nexttowardl(long double x, long double y); 263 264 floating_point remainder (arithmetic x, arithmetic y); 265 float remainderf(float x, float y); 266 long double remainderl(long double x, long double y); 267 268 floating_point remquo (arithmetic x, arithmetic y, int* pquo); 269 float remquof(float x, float y, int* pquo); 270 long double remquol(long double x, long double y, int* pquo); 271 272 floating_point rint (arithmetic x); 273 float rintf(float x); 274 long double rintl(long double x); 275 276 floating_point round (arithmetic x); 277 float roundf(float x); 278 long double roundl(long double x); 279 280 floating_point scalbln (arithmetic x, long ex); 281 float scalblnf(float x, long ex); 282 long double scalblnl(long double x, long ex); 283 284 floating_point scalbn (arithmetic x, int ex); 285 float scalbnf(float x, int ex); 286 long double scalbnl(long double x, int ex); 287 288 floating_point tgamma (arithmetic x); 289 float tgammaf(float x); 290 long double tgammal(long double x); 291 292 floating_point trunc (arithmetic x); 293 float truncf(float x); 294 long double truncl(long double x); 295 296 } // std 297 298 */ 299 300 #include <__config> 301 #include <math.h> 302 #include <type_traits> 303 304 #ifdef _LIBCPP_MSVCRT 305 #include "support/win32/math_win32.h" 306 #endif 307 308 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 309 #pragma GCC system_header 310 #endif 311 312 // signbit 313 314 #ifdef signbit 315 316 template <class _A1> 317 _LIBCPP_ALWAYS_INLINE 318 bool 319 __libcpp_signbit(_A1 __lcpp_x) _NOEXCEPT 320 { 321 return signbit(__lcpp_x); 322 } 323 324 #undef signbit 325 326 template <class _A1> 327 inline _LIBCPP_INLINE_VISIBILITY 328 typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type 329 signbit(_A1 __lcpp_x) _NOEXCEPT 330 { 331 return __libcpp_signbit((typename std::__promote<_A1>::type)__lcpp_x); 332 } 333 334 #endif // signbit 335 336 // fpclassify 337 338 #ifdef fpclassify 339 340 template <class _A1> 341 _LIBCPP_ALWAYS_INLINE 342 int 343 __libcpp_fpclassify(_A1 __lcpp_x) _NOEXCEPT 344 { 345 return fpclassify(__lcpp_x); 346 } 347 348 #undef fpclassify 349 350 template <class _A1> 351 inline _LIBCPP_INLINE_VISIBILITY 352 typename std::enable_if<std::is_arithmetic<_A1>::value, int>::type 353 fpclassify(_A1 __lcpp_x) _NOEXCEPT 354 { 355 return __libcpp_fpclassify((typename std::__promote<_A1>::type)__lcpp_x); 356 } 357 358 #endif // fpclassify 359 360 // isfinite 361 362 #ifdef isfinite 363 364 template <class _A1> 365 _LIBCPP_ALWAYS_INLINE 366 bool 367 __libcpp_isfinite(_A1 __lcpp_x) _NOEXCEPT 368 { 369 return isfinite(__lcpp_x); 370 } 371 372 #undef isfinite 373 374 template <class _A1> 375 inline _LIBCPP_INLINE_VISIBILITY 376 typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type 377 isfinite(_A1 __lcpp_x) _NOEXCEPT 378 { 379 return __libcpp_isfinite((typename std::__promote<_A1>::type)__lcpp_x); 380 } 381 382 #endif // isfinite 383 384 // isinf 385 386 #ifdef isinf 387 388 template <class _A1> 389 _LIBCPP_ALWAYS_INLINE 390 bool 391 __libcpp_isinf(_A1 __lcpp_x) _NOEXCEPT 392 { 393 return isinf(__lcpp_x); 394 } 395 396 #undef isinf 397 398 template <class _A1> 399 inline _LIBCPP_INLINE_VISIBILITY 400 typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type 401 isinf(_A1 __lcpp_x) _NOEXCEPT 402 { 403 return __libcpp_isinf((typename std::__promote<_A1>::type)__lcpp_x); 404 } 405 406 #endif // isinf 407 408 // isnan 409 410 #ifdef isnan 411 412 template <class _A1> 413 _LIBCPP_ALWAYS_INLINE 414 bool 415 __libcpp_isnan(_A1 __lcpp_x) _NOEXCEPT 416 { 417 return isnan(__lcpp_x); 418 } 419 420 #undef isnan 421 422 template <class _A1> 423 inline _LIBCPP_INLINE_VISIBILITY 424 typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type 425 isnan(_A1 __lcpp_x) _NOEXCEPT 426 { 427 return __libcpp_isnan((typename std::__promote<_A1>::type)__lcpp_x); 428 } 429 430 #endif // isnan 431 432 // isnormal 433 434 #ifdef isnormal 435 436 template <class _A1> 437 _LIBCPP_ALWAYS_INLINE 438 bool 439 __libcpp_isnormal(_A1 __lcpp_x) _NOEXCEPT 440 { 441 return isnormal(__lcpp_x); 442 } 443 444 #undef isnormal 445 446 template <class _A1> 447 inline _LIBCPP_INLINE_VISIBILITY 448 typename std::enable_if<std::is_arithmetic<_A1>::value, bool>::type 449 isnormal(_A1 __lcpp_x) _NOEXCEPT 450 { 451 return __libcpp_isnormal((typename std::__promote<_A1>::type)__lcpp_x); 452 } 453 454 #endif // isnormal 455 456 // isgreater 457 458 #ifdef isgreater 459 460 template <class _A1, class _A2> 461 _LIBCPP_ALWAYS_INLINE 462 bool 463 __libcpp_isgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 464 { 465 return isgreater(__lcpp_x, __lcpp_y); 466 } 467 468 #undef isgreater 469 470 template <class _A1, class _A2> 471 inline _LIBCPP_INLINE_VISIBILITY 472 typename std::enable_if 473 < 474 std::is_arithmetic<_A1>::value && 475 std::is_arithmetic<_A2>::value, 476 bool 477 >::type 478 isgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 479 { 480 typedef typename std::__promote<_A1, _A2>::type type; 481 return __libcpp_isgreater((type)__lcpp_x, (type)__lcpp_y); 482 } 483 484 #endif // isgreater 485 486 // isgreaterequal 487 488 #ifdef isgreaterequal 489 490 template <class _A1, class _A2> 491 _LIBCPP_ALWAYS_INLINE 492 bool 493 __libcpp_isgreaterequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 494 { 495 return isgreaterequal(__lcpp_x, __lcpp_y); 496 } 497 498 #undef isgreaterequal 499 500 template <class _A1, class _A2> 501 inline _LIBCPP_INLINE_VISIBILITY 502 typename std::enable_if 503 < 504 std::is_arithmetic<_A1>::value && 505 std::is_arithmetic<_A2>::value, 506 bool 507 >::type 508 isgreaterequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 509 { 510 typedef typename std::__promote<_A1, _A2>::type type; 511 return __libcpp_isgreaterequal((type)__lcpp_x, (type)__lcpp_y); 512 } 513 514 #endif // isgreaterequal 515 516 // isless 517 518 #ifdef isless 519 520 template <class _A1, class _A2> 521 _LIBCPP_ALWAYS_INLINE 522 bool 523 __libcpp_isless(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 524 { 525 return isless(__lcpp_x, __lcpp_y); 526 } 527 528 #undef isless 529 530 template <class _A1, class _A2> 531 inline _LIBCPP_INLINE_VISIBILITY 532 typename std::enable_if 533 < 534 std::is_arithmetic<_A1>::value && 535 std::is_arithmetic<_A2>::value, 536 bool 537 >::type 538 isless(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 539 { 540 typedef typename std::__promote<_A1, _A2>::type type; 541 return __libcpp_isless((type)__lcpp_x, (type)__lcpp_y); 542 } 543 544 #endif // isless 545 546 // islessequal 547 548 #ifdef islessequal 549 550 template <class _A1, class _A2> 551 _LIBCPP_ALWAYS_INLINE 552 bool 553 __libcpp_islessequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 554 { 555 return islessequal(__lcpp_x, __lcpp_y); 556 } 557 558 #undef islessequal 559 560 template <class _A1, class _A2> 561 inline _LIBCPP_INLINE_VISIBILITY 562 typename std::enable_if 563 < 564 std::is_arithmetic<_A1>::value && 565 std::is_arithmetic<_A2>::value, 566 bool 567 >::type 568 islessequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 569 { 570 typedef typename std::__promote<_A1, _A2>::type type; 571 return __libcpp_islessequal((type)__lcpp_x, (type)__lcpp_y); 572 } 573 574 #endif // islessequal 575 576 // islessgreater 577 578 #ifdef islessgreater 579 580 template <class _A1, class _A2> 581 _LIBCPP_ALWAYS_INLINE 582 bool 583 __libcpp_islessgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 584 { 585 return islessgreater(__lcpp_x, __lcpp_y); 586 } 587 588 #undef islessgreater 589 590 template <class _A1, class _A2> 591 inline _LIBCPP_INLINE_VISIBILITY 592 typename std::enable_if 593 < 594 std::is_arithmetic<_A1>::value && 595 std::is_arithmetic<_A2>::value, 596 bool 597 >::type 598 islessgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 599 { 600 typedef typename std::__promote<_A1, _A2>::type type; 601 return __libcpp_islessgreater((type)__lcpp_x, (type)__lcpp_y); 602 } 603 604 #endif // islessgreater 605 606 // isunordered 607 608 #ifdef isunordered 609 610 template <class _A1, class _A2> 611 _LIBCPP_ALWAYS_INLINE 612 bool 613 __libcpp_isunordered(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 614 { 615 return isunordered(__lcpp_x, __lcpp_y); 616 } 617 618 #undef isunordered 619 620 template <class _A1, class _A2> 621 inline _LIBCPP_INLINE_VISIBILITY 622 typename std::enable_if 623 < 624 std::is_arithmetic<_A1>::value && 625 std::is_arithmetic<_A2>::value, 626 bool 627 >::type 628 isunordered(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 629 { 630 typedef typename std::__promote<_A1, _A2>::type type; 631 return __libcpp_isunordered((type)__lcpp_x, (type)__lcpp_y); 632 } 633 634 #endif // isunordered 635 636 _LIBCPP_BEGIN_NAMESPACE_STD 637 638 using ::signbit; 639 using ::fpclassify; 640 using ::isfinite; 641 using ::isinf; 642 using ::isnan; 643 using ::isnormal; 644 using ::isgreater; 645 using ::isgreaterequal; 646 using ::isless; 647 using ::islessequal; 648 using ::islessgreater; 649 using ::isunordered; 650 using ::isunordered; 651 652 using ::float_t; 653 using ::double_t; 654 655 // abs 656 657 #if defined(__sun__) 658 using ::abs; 659 #endif 660 661 #if !defined(_AIX) && !defined(__sun__) 662 inline _LIBCPP_INLINE_VISIBILITY 663 float 664 abs(float __lcpp_x) _NOEXCEPT {return fabsf(__lcpp_x);} 665 666 inline _LIBCPP_INLINE_VISIBILITY 667 double 668 abs(double __lcpp_x) _NOEXCEPT {return fabs(__lcpp_x);} 669 670 inline _LIBCPP_INLINE_VISIBILITY 671 long double 672 abs(long double __lcpp_x) _NOEXCEPT {return fabsl(__lcpp_x);} 673 #endif // !defined(_AIX) 674 675 #ifndef __sun__ 676 677 // acos 678 679 using ::acos; 680 using ::acosf; 681 682 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 683 inline _LIBCPP_INLINE_VISIBILITY float acos(float __lcpp_x) _NOEXCEPT {return acosf(__lcpp_x);} 684 inline _LIBCPP_INLINE_VISIBILITY long double acos(long double __lcpp_x) _NOEXCEPT {return acosl(__lcpp_x);} 685 #endif 686 687 template <class _A1> 688 inline _LIBCPP_INLINE_VISIBILITY 689 typename enable_if<is_integral<_A1>::value, double>::type 690 acos(_A1 __lcpp_x) _NOEXCEPT {return acos((double)__lcpp_x);} 691 692 // asin 693 694 using ::asin; 695 using ::asinf; 696 697 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 698 inline _LIBCPP_INLINE_VISIBILITY float asin(float __lcpp_x) _NOEXCEPT {return asinf(__lcpp_x);} 699 inline _LIBCPP_INLINE_VISIBILITY long double asin(long double __lcpp_x) _NOEXCEPT {return asinl(__lcpp_x);} 700 #endif 701 702 template <class _A1> 703 inline _LIBCPP_INLINE_VISIBILITY 704 typename enable_if<is_integral<_A1>::value, double>::type 705 asin(_A1 __lcpp_x) _NOEXCEPT {return asin((double)__lcpp_x);} 706 707 // atan 708 709 using ::atan; 710 using ::atanf; 711 712 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 713 inline _LIBCPP_INLINE_VISIBILITY float atan(float __lcpp_x) _NOEXCEPT {return atanf(__lcpp_x);} 714 inline _LIBCPP_INLINE_VISIBILITY long double atan(long double __lcpp_x) _NOEXCEPT {return atanl(__lcpp_x);} 715 #endif 716 717 template <class _A1> 718 inline _LIBCPP_INLINE_VISIBILITY 719 typename enable_if<is_integral<_A1>::value, double>::type 720 atan(_A1 __lcpp_x) _NOEXCEPT {return atan((double)__lcpp_x);} 721 722 // atan2 723 724 using ::atan2; 725 using ::atan2f; 726 727 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 728 inline _LIBCPP_INLINE_VISIBILITY float atan2(float __lcpp_y, float __lcpp_x) _NOEXCEPT {return atan2f(__lcpp_y, __lcpp_x);} 729 inline _LIBCPP_INLINE_VISIBILITY long double atan2(long double __lcpp_y, long double __lcpp_x) _NOEXCEPT {return atan2l(__lcpp_y, __lcpp_x);} 730 #endif 731 732 template <class _A1, class _A2> 733 inline _LIBCPP_INLINE_VISIBILITY 734 typename __lazy_enable_if 735 < 736 is_arithmetic<_A1>::value && 737 is_arithmetic<_A2>::value, 738 __promote<_A1, _A2> 739 >::type 740 atan2(_A1 __lcpp_y, _A2 __lcpp_x) _NOEXCEPT 741 { 742 typedef typename __promote<_A1, _A2>::type __result_type; 743 static_assert((!(is_same<_A1, __result_type>::value && 744 is_same<_A2, __result_type>::value)), ""); 745 return atan2((__result_type)__lcpp_y, (__result_type)__lcpp_x); 746 } 747 748 // ceil 749 750 using ::ceil; 751 using ::ceilf; 752 753 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 754 inline _LIBCPP_INLINE_VISIBILITY float ceil(float __lcpp_x) _NOEXCEPT {return ceilf(__lcpp_x);} 755 inline _LIBCPP_INLINE_VISIBILITY long double ceil(long double __lcpp_x) _NOEXCEPT {return ceill(__lcpp_x);} 756 #endif 757 758 template <class _A1> 759 inline _LIBCPP_INLINE_VISIBILITY 760 typename enable_if<is_integral<_A1>::value, double>::type 761 ceil(_A1 __lcpp_x) _NOEXCEPT {return ceil((double)__lcpp_x);} 762 763 // cos 764 765 using ::cos; 766 using ::cosf; 767 768 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 769 inline _LIBCPP_INLINE_VISIBILITY float cos(float __lcpp_x) _NOEXCEPT {return cosf(__lcpp_x);} 770 inline _LIBCPP_INLINE_VISIBILITY long double cos(long double __lcpp_x) _NOEXCEPT {return cosl(__lcpp_x);} 771 #endif 772 773 template <class _A1> 774 inline _LIBCPP_INLINE_VISIBILITY 775 typename enable_if<is_integral<_A1>::value, double>::type 776 cos(_A1 __lcpp_x) _NOEXCEPT {return cos((double)__lcpp_x);} 777 778 // cosh 779 780 using ::cosh; 781 using ::coshf; 782 783 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 784 inline _LIBCPP_INLINE_VISIBILITY float cosh(float __lcpp_x) _NOEXCEPT {return coshf(__lcpp_x);} 785 inline _LIBCPP_INLINE_VISIBILITY long double cosh(long double __lcpp_x) _NOEXCEPT {return coshl(__lcpp_x);} 786 #endif 787 788 template <class _A1> 789 inline _LIBCPP_INLINE_VISIBILITY 790 typename enable_if<is_integral<_A1>::value, double>::type 791 cosh(_A1 __lcpp_x) _NOEXCEPT {return cosh((double)__lcpp_x);} 792 793 #endif // __sun__ 794 // exp 795 796 using ::exp; 797 using ::expf; 798 799 #ifndef __sun__ 800 801 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 802 inline _LIBCPP_INLINE_VISIBILITY float exp(float __lcpp_x) _NOEXCEPT {return expf(__lcpp_x);} 803 inline _LIBCPP_INLINE_VISIBILITY long double exp(long double __lcpp_x) _NOEXCEPT {return expl(__lcpp_x);} 804 #endif 805 806 807 template <class _A1> 808 inline _LIBCPP_INLINE_VISIBILITY 809 typename enable_if<is_integral<_A1>::value, double>::type 810 exp(_A1 __lcpp_x) _NOEXCEPT {return exp((double)__lcpp_x);} 811 812 // fabs 813 814 using ::fabs; 815 using ::fabsf; 816 817 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 818 inline _LIBCPP_INLINE_VISIBILITY float fabs(float __lcpp_x) _NOEXCEPT {return fabsf(__lcpp_x);} 819 inline _LIBCPP_INLINE_VISIBILITY long double fabs(long double __lcpp_x) _NOEXCEPT {return fabsl(__lcpp_x);} 820 #endif 821 822 template <class _A1> 823 inline _LIBCPP_INLINE_VISIBILITY 824 typename enable_if<is_integral<_A1>::value, double>::type 825 fabs(_A1 __lcpp_x) _NOEXCEPT {return fabs((double)__lcpp_x);} 826 827 // floor 828 829 using ::floor; 830 using ::floorf; 831 832 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 833 inline _LIBCPP_INLINE_VISIBILITY float floor(float __lcpp_x) _NOEXCEPT {return floorf(__lcpp_x);} 834 inline _LIBCPP_INLINE_VISIBILITY long double floor(long double __lcpp_x) _NOEXCEPT {return floorl(__lcpp_x);} 835 #endif 836 837 template <class _A1> 838 inline _LIBCPP_INLINE_VISIBILITY 839 typename enable_if<is_integral<_A1>::value, double>::type 840 floor(_A1 __lcpp_x) _NOEXCEPT {return floor((double)__lcpp_x);} 841 842 // fmod 843 844 #endif //__sun__ 845 using ::fmod; 846 using ::fmodf; 847 #ifndef __sun__ 848 849 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 850 inline _LIBCPP_INLINE_VISIBILITY float fmod(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return fmodf(__lcpp_x, __lcpp_y);} 851 inline _LIBCPP_INLINE_VISIBILITY long double fmod(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return fmodl(__lcpp_x, __lcpp_y);} 852 #endif 853 854 template <class _A1, class _A2> 855 inline _LIBCPP_INLINE_VISIBILITY 856 typename __lazy_enable_if 857 < 858 is_arithmetic<_A1>::value && 859 is_arithmetic<_A2>::value, 860 __promote<_A1, _A2> 861 >::type 862 fmod(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 863 { 864 typedef typename __promote<_A1, _A2>::type __result_type; 865 static_assert((!(is_same<_A1, __result_type>::value && 866 is_same<_A2, __result_type>::value)), ""); 867 return fmod((__result_type)__lcpp_x, (__result_type)__lcpp_y); 868 } 869 870 871 // frexp 872 873 using ::frexp; 874 using ::frexpf; 875 876 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 877 inline _LIBCPP_INLINE_VISIBILITY float frexp(float __lcpp_x, int* __lcpp_e) _NOEXCEPT {return frexpf(__lcpp_x, __lcpp_e);} 878 inline _LIBCPP_INLINE_VISIBILITY long double frexp(long double __lcpp_x, int* __lcpp_e) _NOEXCEPT {return frexpl(__lcpp_x, __lcpp_e);} 879 #endif 880 881 template <class _A1> 882 inline _LIBCPP_INLINE_VISIBILITY 883 typename enable_if<is_integral<_A1>::value, double>::type 884 frexp(_A1 __lcpp_x, int* __lcpp_e) _NOEXCEPT {return frexp((double)__lcpp_x, __lcpp_e);} 885 886 // ldexp 887 888 using ::ldexp; 889 using ::ldexpf; 890 891 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 892 inline _LIBCPP_INLINE_VISIBILITY float ldexp(float __lcpp_x, int __lcpp_e) _NOEXCEPT {return ldexpf(__lcpp_x, __lcpp_e);} 893 inline _LIBCPP_INLINE_VISIBILITY long double ldexp(long double __lcpp_x, int __lcpp_e) _NOEXCEPT {return ldexpl(__lcpp_x, __lcpp_e);} 894 #endif 895 896 template <class _A1> 897 inline _LIBCPP_INLINE_VISIBILITY 898 typename enable_if<is_integral<_A1>::value, double>::type 899 ldexp(_A1 __lcpp_x, int __lcpp_e) _NOEXCEPT {return ldexp((double)__lcpp_x, __lcpp_e);} 900 901 // log 902 903 #endif // __sun__ 904 using ::log; 905 using ::logf; 906 #ifndef __sun__ 907 908 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 909 inline _LIBCPP_INLINE_VISIBILITY float log(float __lcpp_x) _NOEXCEPT {return logf(__lcpp_x);} 910 inline _LIBCPP_INLINE_VISIBILITY long double log(long double __lcpp_x) _NOEXCEPT {return logl(__lcpp_x);} 911 #endif 912 913 template <class _A1> 914 inline _LIBCPP_INLINE_VISIBILITY 915 typename enable_if<is_integral<_A1>::value, double>::type 916 log(_A1 __lcpp_x) _NOEXCEPT {return log((double)__lcpp_x);} 917 918 919 // log10 920 921 using ::log10; 922 using ::log10f; 923 924 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 925 inline _LIBCPP_INLINE_VISIBILITY float log10(float __lcpp_x) _NOEXCEPT {return log10f(__lcpp_x);} 926 inline _LIBCPP_INLINE_VISIBILITY long double log10(long double __lcpp_x) _NOEXCEPT {return log10l(__lcpp_x);} 927 #endif 928 929 template <class _A1> 930 inline _LIBCPP_INLINE_VISIBILITY 931 typename enable_if<is_integral<_A1>::value, double>::type 932 log10(_A1 __lcpp_x) _NOEXCEPT {return log10((double)__lcpp_x);} 933 934 // modf 935 936 using ::modf; 937 using ::modff; 938 939 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 940 inline _LIBCPP_INLINE_VISIBILITY float modf(float __lcpp_x, float* __lcpp_y) _NOEXCEPT {return modff(__lcpp_x, __lcpp_y);} 941 inline _LIBCPP_INLINE_VISIBILITY long double modf(long double __lcpp_x, long double* __lcpp_y) _NOEXCEPT {return modfl(__lcpp_x, __lcpp_y);} 942 #endif 943 944 // pow 945 946 #endif // __sun__ 947 using ::pow; 948 using ::powf; 949 950 #ifndef __sun__ 951 952 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 953 inline _LIBCPP_INLINE_VISIBILITY float pow(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return powf(__lcpp_x, __lcpp_y);} 954 inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return powl(__lcpp_x, __lcpp_y);} 955 #endif 956 957 template <class _A1, class _A2> 958 inline _LIBCPP_INLINE_VISIBILITY 959 typename __lazy_enable_if 960 < 961 is_arithmetic<_A1>::value && 962 is_arithmetic<_A2>::value, 963 __promote<_A1, _A2> 964 >::type 965 pow(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 966 { 967 typedef typename __promote<_A1, _A2>::type __result_type; 968 static_assert((!(is_same<_A1, __result_type>::value && 969 is_same<_A2, __result_type>::value)), ""); 970 return pow((__result_type)__lcpp_x, (__result_type)__lcpp_y); 971 } 972 973 // sin 974 975 using ::sin; 976 using ::sinf; 977 978 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 979 inline _LIBCPP_INLINE_VISIBILITY float sin(float __lcpp_x) _NOEXCEPT {return sinf(__lcpp_x);} 980 inline _LIBCPP_INLINE_VISIBILITY long double sin(long double __lcpp_x) _NOEXCEPT {return sinl(__lcpp_x);} 981 #endif 982 983 template <class _A1> 984 inline _LIBCPP_INLINE_VISIBILITY 985 typename enable_if<is_integral<_A1>::value, double>::type 986 sin(_A1 __lcpp_x) _NOEXCEPT {return sin((double)__lcpp_x);} 987 988 // sinh 989 990 using ::sinh; 991 using ::sinhf; 992 993 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 994 inline _LIBCPP_INLINE_VISIBILITY float sinh(float __lcpp_x) _NOEXCEPT {return sinhf(__lcpp_x);} 995 inline _LIBCPP_INLINE_VISIBILITY long double sinh(long double __lcpp_x) _NOEXCEPT {return sinhl(__lcpp_x);} 996 #endif 997 998 template <class _A1> 999 inline _LIBCPP_INLINE_VISIBILITY 1000 typename enable_if<is_integral<_A1>::value, double>::type 1001 sinh(_A1 __lcpp_x) _NOEXCEPT {return sinh((double)__lcpp_x);} 1002 1003 // sqrt 1004 1005 #endif // __sun__ 1006 using ::sqrt; 1007 using ::sqrtf; 1008 1009 1010 #if !(defined(_LIBCPP_MSVCRT) || defined(__sun__) || defined(_AIX)) 1011 inline _LIBCPP_INLINE_VISIBILITY float sqrt(float __lcpp_x) _NOEXCEPT {return sqrtf(__lcpp_x);} 1012 inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __lcpp_x) _NOEXCEPT {return sqrtl(__lcpp_x);} 1013 #endif 1014 1015 template <class _A1> 1016 inline _LIBCPP_INLINE_VISIBILITY 1017 typename enable_if<is_integral<_A1>::value, double>::type 1018 sqrt(_A1 __lcpp_x) _NOEXCEPT {return sqrt((double)__lcpp_x);} 1019 1020 // tan 1021 1022 using ::tan; 1023 using ::tanf; 1024 #ifndef __sun__ 1025 1026 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 1027 inline _LIBCPP_INLINE_VISIBILITY float tan(float __lcpp_x) _NOEXCEPT {return tanf(__lcpp_x);} 1028 inline _LIBCPP_INLINE_VISIBILITY long double tan(long double __lcpp_x) _NOEXCEPT {return tanl(__lcpp_x);} 1029 #endif 1030 1031 template <class _A1> 1032 inline _LIBCPP_INLINE_VISIBILITY 1033 typename enable_if<is_integral<_A1>::value, double>::type 1034 tan(_A1 __lcpp_x) _NOEXCEPT {return tan((double)__lcpp_x);} 1035 1036 // tanh 1037 1038 using ::tanh; 1039 using ::tanhf; 1040 1041 #if !(defined(_LIBCPP_MSVCRT) || defined(_AIX)) 1042 inline _LIBCPP_INLINE_VISIBILITY float tanh(float __lcpp_x) _NOEXCEPT {return tanhf(__lcpp_x);} 1043 inline _LIBCPP_INLINE_VISIBILITY long double tanh(long double __lcpp_x) _NOEXCEPT {return tanhl(__lcpp_x);} 1044 #endif 1045 1046 template <class _A1> 1047 inline _LIBCPP_INLINE_VISIBILITY 1048 typename enable_if<is_integral<_A1>::value, double>::type 1049 tanh(_A1 __lcpp_x) _NOEXCEPT {return tanh((double)__lcpp_x);} 1050 1051 // acosh 1052 1053 #ifndef _LIBCPP_MSVCRT 1054 using ::acosh; 1055 using ::acoshf; 1056 1057 inline _LIBCPP_INLINE_VISIBILITY float acosh(float __lcpp_x) _NOEXCEPT {return acoshf(__lcpp_x);} 1058 inline _LIBCPP_INLINE_VISIBILITY long double acosh(long double __lcpp_x) _NOEXCEPT {return acoshl(__lcpp_x);} 1059 1060 template <class _A1> 1061 inline _LIBCPP_INLINE_VISIBILITY 1062 typename enable_if<is_integral<_A1>::value, double>::type 1063 acosh(_A1 __lcpp_x) _NOEXCEPT {return acosh((double)__lcpp_x);} 1064 #endif 1065 1066 // asinh 1067 1068 #ifndef _LIBCPP_MSVCRT 1069 using ::asinh; 1070 using ::asinhf; 1071 1072 inline _LIBCPP_INLINE_VISIBILITY float asinh(float __lcpp_x) _NOEXCEPT {return asinhf(__lcpp_x);} 1073 inline _LIBCPP_INLINE_VISIBILITY long double asinh(long double __lcpp_x) _NOEXCEPT {return asinhl(__lcpp_x);} 1074 1075 template <class _A1> 1076 inline _LIBCPP_INLINE_VISIBILITY 1077 typename enable_if<is_integral<_A1>::value, double>::type 1078 asinh(_A1 __lcpp_x) _NOEXCEPT {return asinh((double)__lcpp_x);} 1079 #endif 1080 1081 // atanh 1082 1083 #ifndef _LIBCPP_MSVCRT 1084 using ::atanh; 1085 using ::atanhf; 1086 1087 inline _LIBCPP_INLINE_VISIBILITY float atanh(float __lcpp_x) _NOEXCEPT {return atanhf(__lcpp_x);} 1088 inline _LIBCPP_INLINE_VISIBILITY long double atanh(long double __lcpp_x) _NOEXCEPT {return atanhl(__lcpp_x);} 1089 1090 template <class _A1> 1091 inline _LIBCPP_INLINE_VISIBILITY 1092 typename enable_if<is_integral<_A1>::value, double>::type 1093 atanh(_A1 __lcpp_x) _NOEXCEPT {return atanh((double)__lcpp_x);} 1094 #endif 1095 1096 // cbrt 1097 1098 #ifndef _LIBCPP_MSVCRT 1099 using ::cbrt; 1100 using ::cbrtf; 1101 1102 inline _LIBCPP_INLINE_VISIBILITY float cbrt(float __lcpp_x) _NOEXCEPT {return cbrtf(__lcpp_x);} 1103 inline _LIBCPP_INLINE_VISIBILITY long double cbrt(long double __lcpp_x) _NOEXCEPT {return cbrtl(__lcpp_x);} 1104 1105 template <class _A1> 1106 inline _LIBCPP_INLINE_VISIBILITY 1107 typename enable_if<is_integral<_A1>::value, double>::type 1108 cbrt(_A1 __lcpp_x) _NOEXCEPT {return cbrt((double)__lcpp_x);} 1109 #endif 1110 1111 // copysign 1112 1113 using ::copysign; 1114 using ::copysignf; 1115 1116 #if !defined(_VC_CRT_MAJOR_VERSION) || (_VC_CRT_MAJOR_VERSION < 12) 1117 inline _LIBCPP_INLINE_VISIBILITY float copysign(float __lcpp_x, 1118 float __lcpp_y) _NOEXCEPT { 1119 return copysignf(__lcpp_x, __lcpp_y); 1120 } 1121 inline _LIBCPP_INLINE_VISIBILITY long double 1122 copysign(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT { 1123 return copysignl(__lcpp_x, __lcpp_y); 1124 } 1125 #endif 1126 1127 template <class _A1, class _A2> 1128 inline _LIBCPP_INLINE_VISIBILITY 1129 typename __lazy_enable_if 1130 < 1131 is_arithmetic<_A1>::value && 1132 is_arithmetic<_A2>::value, 1133 __promote<_A1, _A2> 1134 >::type 1135 copysign(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 1136 { 1137 typedef typename __promote<_A1, _A2>::type __result_type; 1138 static_assert((!(is_same<_A1, __result_type>::value && 1139 is_same<_A2, __result_type>::value)), ""); 1140 return copysign((__result_type)__lcpp_x, (__result_type)__lcpp_y); 1141 } 1142 1143 #ifndef _LIBCPP_MSVCRT 1144 1145 // erf 1146 1147 using ::erf; 1148 using ::erff; 1149 1150 inline _LIBCPP_INLINE_VISIBILITY float erf(float __lcpp_x) _NOEXCEPT {return erff(__lcpp_x);} 1151 inline _LIBCPP_INLINE_VISIBILITY long double erf(long double __lcpp_x) _NOEXCEPT {return erfl(__lcpp_x);} 1152 1153 template <class _A1> 1154 inline _LIBCPP_INLINE_VISIBILITY 1155 typename enable_if<is_integral<_A1>::value, double>::type 1156 erf(_A1 __lcpp_x) _NOEXCEPT {return erf((double)__lcpp_x);} 1157 1158 // erfc 1159 1160 using ::erfc; 1161 using ::erfcf; 1162 1163 inline _LIBCPP_INLINE_VISIBILITY float erfc(float __lcpp_x) _NOEXCEPT {return erfcf(__lcpp_x);} 1164 inline _LIBCPP_INLINE_VISIBILITY long double erfc(long double __lcpp_x) _NOEXCEPT {return erfcl(__lcpp_x);} 1165 1166 template <class _A1> 1167 inline _LIBCPP_INLINE_VISIBILITY 1168 typename enable_if<is_integral<_A1>::value, double>::type 1169 erfc(_A1 __lcpp_x) _NOEXCEPT {return erfc((double)__lcpp_x);} 1170 1171 // exp2 1172 1173 using ::exp2; 1174 using ::exp2f; 1175 1176 inline _LIBCPP_INLINE_VISIBILITY float exp2(float __lcpp_x) _NOEXCEPT {return exp2f(__lcpp_x);} 1177 inline _LIBCPP_INLINE_VISIBILITY long double exp2(long double __lcpp_x) _NOEXCEPT {return exp2l(__lcpp_x);} 1178 1179 template <class _A1> 1180 inline _LIBCPP_INLINE_VISIBILITY 1181 typename enable_if<is_integral<_A1>::value, double>::type 1182 exp2(_A1 __lcpp_x) _NOEXCEPT {return exp2((double)__lcpp_x);} 1183 1184 // expm1 1185 1186 using ::expm1; 1187 using ::expm1f; 1188 1189 inline _LIBCPP_INLINE_VISIBILITY float expm1(float __lcpp_x) _NOEXCEPT {return expm1f(__lcpp_x);} 1190 inline _LIBCPP_INLINE_VISIBILITY long double expm1(long double __lcpp_x) _NOEXCEPT {return expm1l(__lcpp_x);} 1191 1192 template <class _A1> 1193 inline _LIBCPP_INLINE_VISIBILITY 1194 typename enable_if<is_integral<_A1>::value, double>::type 1195 expm1(_A1 __lcpp_x) _NOEXCEPT {return expm1((double)__lcpp_x);} 1196 1197 // fdim 1198 1199 using ::fdim; 1200 using ::fdimf; 1201 1202 inline _LIBCPP_INLINE_VISIBILITY float fdim(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return fdimf(__lcpp_x, __lcpp_y);} 1203 inline _LIBCPP_INLINE_VISIBILITY long double fdim(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return fdiml(__lcpp_x, __lcpp_y);} 1204 1205 template <class _A1, class _A2> 1206 inline _LIBCPP_INLINE_VISIBILITY 1207 typename __lazy_enable_if 1208 < 1209 is_arithmetic<_A1>::value && 1210 is_arithmetic<_A2>::value, 1211 __promote<_A1, _A2> 1212 >::type 1213 fdim(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 1214 { 1215 typedef typename __promote<_A1, _A2>::type __result_type; 1216 static_assert((!(is_same<_A1, __result_type>::value && 1217 is_same<_A2, __result_type>::value)), ""); 1218 return fdim((__result_type)__lcpp_x, (__result_type)__lcpp_y); 1219 } 1220 1221 // fma 1222 1223 using ::fmaf; 1224 using ::fma; 1225 1226 inline _LIBCPP_INLINE_VISIBILITY float fma(float __lcpp_x, float __lcpp_y, float __lcpp_z) _NOEXCEPT {return fmaf(__lcpp_x, __lcpp_y, __lcpp_z);} 1227 inline _LIBCPP_INLINE_VISIBILITY long double fma(long double __lcpp_x, long double __lcpp_y, long double __lcpp_z) _NOEXCEPT {return fmal(__lcpp_x, __lcpp_y, __lcpp_z);} 1228 1229 template <class _A1, class _A2, class _A3> 1230 inline _LIBCPP_INLINE_VISIBILITY 1231 typename __lazy_enable_if 1232 < 1233 is_arithmetic<_A1>::value && 1234 is_arithmetic<_A2>::value && 1235 is_arithmetic<_A3>::value, 1236 __promote<_A1, _A2, _A3> 1237 >::type 1238 fma(_A1 __lcpp_x, _A2 __lcpp_y, _A3 __lcpp_z) _NOEXCEPT 1239 { 1240 typedef typename __promote<_A1, _A2, _A3>::type __result_type; 1241 static_assert((!(is_same<_A1, __result_type>::value && 1242 is_same<_A2, __result_type>::value && 1243 is_same<_A3, __result_type>::value)), ""); 1244 return fma((__result_type)__lcpp_x, (__result_type)__lcpp_y, (__result_type)__lcpp_z); 1245 } 1246 1247 // fmax 1248 1249 using ::fmax; 1250 using ::fmaxf; 1251 1252 inline _LIBCPP_INLINE_VISIBILITY float fmax(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return fmaxf(__lcpp_x, __lcpp_y);} 1253 inline _LIBCPP_INLINE_VISIBILITY long double fmax(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return fmaxl(__lcpp_x, __lcpp_y);} 1254 1255 template <class _A1, class _A2> 1256 inline _LIBCPP_INLINE_VISIBILITY 1257 typename __lazy_enable_if 1258 < 1259 is_arithmetic<_A1>::value && 1260 is_arithmetic<_A2>::value, 1261 __promote<_A1, _A2> 1262 >::type 1263 fmax(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 1264 { 1265 typedef typename __promote<_A1, _A2>::type __result_type; 1266 static_assert((!(is_same<_A1, __result_type>::value && 1267 is_same<_A2, __result_type>::value)), ""); 1268 return fmax((__result_type)__lcpp_x, (__result_type)__lcpp_y); 1269 } 1270 1271 // fmin 1272 1273 using ::fmin; 1274 using ::fminf; 1275 1276 inline _LIBCPP_INLINE_VISIBILITY float fmin(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return fminf(__lcpp_x, __lcpp_y);} 1277 inline _LIBCPP_INLINE_VISIBILITY long double fmin(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return fminl(__lcpp_x, __lcpp_y);} 1278 1279 template <class _A1, class _A2> 1280 inline _LIBCPP_INLINE_VISIBILITY 1281 typename __lazy_enable_if 1282 < 1283 is_arithmetic<_A1>::value && 1284 is_arithmetic<_A2>::value, 1285 __promote<_A1, _A2> 1286 >::type 1287 fmin(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 1288 { 1289 typedef typename __promote<_A1, _A2>::type __result_type; 1290 static_assert((!(is_same<_A1, __result_type>::value && 1291 is_same<_A2, __result_type>::value)), ""); 1292 return fmin((__result_type)__lcpp_x, (__result_type)__lcpp_y); 1293 } 1294 1295 // hypot 1296 1297 using ::hypot; 1298 using ::hypotf; 1299 1300 inline _LIBCPP_INLINE_VISIBILITY float hypot(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return hypotf(__lcpp_x, __lcpp_y);} 1301 inline _LIBCPP_INLINE_VISIBILITY long double hypot(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return hypotl(__lcpp_x, __lcpp_y);} 1302 1303 template <class _A1, class _A2> 1304 inline _LIBCPP_INLINE_VISIBILITY 1305 typename __lazy_enable_if 1306 < 1307 is_arithmetic<_A1>::value && 1308 is_arithmetic<_A2>::value, 1309 __promote<_A1, _A2> 1310 >::type 1311 hypot(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 1312 { 1313 typedef typename __promote<_A1, _A2>::type __result_type; 1314 static_assert((!(is_same<_A1, __result_type>::value && 1315 is_same<_A2, __result_type>::value)), ""); 1316 return hypot((__result_type)__lcpp_x, (__result_type)__lcpp_y); 1317 } 1318 1319 // ilogb 1320 1321 using ::ilogb; 1322 using ::ilogbf; 1323 1324 inline _LIBCPP_INLINE_VISIBILITY int ilogb(float __lcpp_x) _NOEXCEPT {return ilogbf(__lcpp_x);} 1325 inline _LIBCPP_INLINE_VISIBILITY int ilogb(long double __lcpp_x) _NOEXCEPT {return ilogbl(__lcpp_x);} 1326 1327 template <class _A1> 1328 inline _LIBCPP_INLINE_VISIBILITY 1329 typename enable_if<is_integral<_A1>::value, int>::type 1330 ilogb(_A1 __lcpp_x) _NOEXCEPT {return ilogb((double)__lcpp_x);} 1331 1332 // lgamma 1333 1334 using ::lgamma; 1335 using ::lgammaf; 1336 1337 inline _LIBCPP_INLINE_VISIBILITY float lgamma(float __lcpp_x) _NOEXCEPT {return lgammaf(__lcpp_x);} 1338 inline _LIBCPP_INLINE_VISIBILITY long double lgamma(long double __lcpp_x) _NOEXCEPT {return lgammal(__lcpp_x);} 1339 1340 1341 template <class _A1> 1342 inline _LIBCPP_INLINE_VISIBILITY 1343 typename enable_if<is_integral<_A1>::value, double>::type 1344 lgamma(_A1 __lcpp_x) _NOEXCEPT {return lgamma((double)__lcpp_x);} 1345 1346 1347 // llrint 1348 1349 using ::llrint; 1350 using ::llrintf; 1351 1352 inline _LIBCPP_INLINE_VISIBILITY long long llrint(float __lcpp_x) _NOEXCEPT {return llrintf(__lcpp_x);} 1353 inline _LIBCPP_INLINE_VISIBILITY long long llrint(long double __lcpp_x) _NOEXCEPT {return llrintl(__lcpp_x);} 1354 1355 template <class _A1> 1356 inline _LIBCPP_INLINE_VISIBILITY 1357 typename enable_if<is_integral<_A1>::value, long long>::type 1358 llrint(_A1 __lcpp_x) _NOEXCEPT {return llrint((double)__lcpp_x);} 1359 1360 // llround 1361 1362 using ::llround; 1363 using ::llroundf; 1364 1365 inline _LIBCPP_INLINE_VISIBILITY long long llround(float __lcpp_x) _NOEXCEPT {return llroundf(__lcpp_x);} 1366 inline _LIBCPP_INLINE_VISIBILITY long long llround(long double __lcpp_x) _NOEXCEPT {return llroundl(__lcpp_x);} 1367 1368 template <class _A1> 1369 inline _LIBCPP_INLINE_VISIBILITY 1370 typename enable_if<is_integral<_A1>::value, long long>::type 1371 llround(_A1 __lcpp_x) _NOEXCEPT {return llround((double)__lcpp_x);} 1372 1373 // log1p 1374 1375 using ::log1p; 1376 using ::log1pf; 1377 1378 inline _LIBCPP_INLINE_VISIBILITY float log1p(float __lcpp_x) _NOEXCEPT {return log1pf(__lcpp_x);} 1379 inline _LIBCPP_INLINE_VISIBILITY long double log1p(long double __lcpp_x) _NOEXCEPT {return log1pl(__lcpp_x);} 1380 1381 template <class _A1> 1382 inline _LIBCPP_INLINE_VISIBILITY 1383 typename enable_if<is_integral<_A1>::value, double>::type 1384 log1p(_A1 __lcpp_x) _NOEXCEPT {return log1p((double)__lcpp_x);} 1385 1386 // log2 1387 1388 using ::log2; 1389 using ::log2f; 1390 1391 inline _LIBCPP_INLINE_VISIBILITY float log2(float __lcpp_x) _NOEXCEPT {return log2f(__lcpp_x);} 1392 inline _LIBCPP_INLINE_VISIBILITY long double log2(long double __lcpp_x) _NOEXCEPT {return log2l(__lcpp_x);} 1393 1394 template <class _A1> 1395 inline _LIBCPP_INLINE_VISIBILITY 1396 typename enable_if<is_integral<_A1>::value, double>::type 1397 log2(_A1 __lcpp_x) _NOEXCEPT {return log2((double)__lcpp_x);} 1398 1399 // logb 1400 1401 using ::logb; 1402 using ::logbf; 1403 1404 inline _LIBCPP_INLINE_VISIBILITY float logb(float __lcpp_x) _NOEXCEPT {return logbf(__lcpp_x);} 1405 inline _LIBCPP_INLINE_VISIBILITY long double logb(long double __lcpp_x) _NOEXCEPT {return logbl(__lcpp_x);} 1406 1407 template <class _A1> 1408 inline _LIBCPP_INLINE_VISIBILITY 1409 typename enable_if<is_integral<_A1>::value, double>::type 1410 logb(_A1 __lcpp_x) _NOEXCEPT {return logb((double)__lcpp_x);} 1411 1412 // lrint 1413 1414 using ::lrint; 1415 using ::lrintf; 1416 1417 inline _LIBCPP_INLINE_VISIBILITY long lrint(float __lcpp_x) _NOEXCEPT {return lrintf(__lcpp_x);} 1418 inline _LIBCPP_INLINE_VISIBILITY long lrint(long double __lcpp_x) _NOEXCEPT {return lrintl(__lcpp_x);} 1419 1420 template <class _A1> 1421 inline _LIBCPP_INLINE_VISIBILITY 1422 typename enable_if<is_integral<_A1>::value, long>::type 1423 lrint(_A1 __lcpp_x) _NOEXCEPT {return lrint((double)__lcpp_x);} 1424 1425 // lround 1426 1427 using ::lround; 1428 using ::lroundf; 1429 1430 inline _LIBCPP_INLINE_VISIBILITY long lround(float __lcpp_x) _NOEXCEPT {return lroundf(__lcpp_x);} 1431 inline _LIBCPP_INLINE_VISIBILITY long lround(long double __lcpp_x) _NOEXCEPT {return lroundl(__lcpp_x);} 1432 1433 template <class _A1> 1434 inline _LIBCPP_INLINE_VISIBILITY 1435 typename enable_if<is_integral<_A1>::value, long>::type 1436 lround(_A1 __lcpp_x) _NOEXCEPT {return lround((double)__lcpp_x);} 1437 1438 #endif // _LIBCPP_MSVCRT 1439 #endif // __sun__ 1440 1441 // nan 1442 1443 #ifndef _LIBCPP_MSVCRT 1444 using ::nan; 1445 using ::nanf; 1446 #endif // _LIBCPP_MSVCRT 1447 1448 #ifndef __sun__ 1449 #ifndef _LIBCPP_MSVCRT 1450 1451 // nearbyint 1452 1453 using ::nearbyint; 1454 using ::nearbyintf; 1455 1456 inline _LIBCPP_INLINE_VISIBILITY float nearbyint(float __lcpp_x) _NOEXCEPT {return nearbyintf(__lcpp_x);} 1457 inline _LIBCPP_INLINE_VISIBILITY long double nearbyint(long double __lcpp_x) _NOEXCEPT {return nearbyintl(__lcpp_x);} 1458 1459 template <class _A1> 1460 inline _LIBCPP_INLINE_VISIBILITY 1461 typename enable_if<is_integral<_A1>::value, double>::type 1462 nearbyint(_A1 __lcpp_x) _NOEXCEPT {return nearbyint((double)__lcpp_x);} 1463 1464 // nextafter 1465 1466 using ::nextafter; 1467 using ::nextafterf; 1468 1469 inline _LIBCPP_INLINE_VISIBILITY float nextafter(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return nextafterf(__lcpp_x, __lcpp_y);} 1470 inline _LIBCPP_INLINE_VISIBILITY long double nextafter(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return nextafterl(__lcpp_x, __lcpp_y);} 1471 1472 template <class _A1, class _A2> 1473 inline _LIBCPP_INLINE_VISIBILITY 1474 typename __lazy_enable_if 1475 < 1476 is_arithmetic<_A1>::value && 1477 is_arithmetic<_A2>::value, 1478 __promote<_A1, _A2> 1479 >::type 1480 nextafter(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 1481 { 1482 typedef typename __promote<_A1, _A2>::type __result_type; 1483 static_assert((!(is_same<_A1, __result_type>::value && 1484 is_same<_A2, __result_type>::value)), ""); 1485 return nextafter((__result_type)__lcpp_x, (__result_type)__lcpp_y); 1486 } 1487 1488 // nexttoward 1489 1490 using ::nexttoward; 1491 using ::nexttowardf; 1492 1493 inline _LIBCPP_INLINE_VISIBILITY float nexttoward(float __lcpp_x, long double __lcpp_y) _NOEXCEPT {return nexttowardf(__lcpp_x, __lcpp_y);} 1494 inline _LIBCPP_INLINE_VISIBILITY long double nexttoward(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return nexttowardl(__lcpp_x, __lcpp_y);} 1495 1496 template <class _A1> 1497 inline _LIBCPP_INLINE_VISIBILITY 1498 typename enable_if<is_integral<_A1>::value, double>::type 1499 nexttoward(_A1 __lcpp_x, long double __lcpp_y) _NOEXCEPT {return nexttoward((double)__lcpp_x, __lcpp_y);} 1500 1501 // remainder 1502 1503 using ::remainder; 1504 using ::remainderf; 1505 1506 inline _LIBCPP_INLINE_VISIBILITY float remainder(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return remainderf(__lcpp_x, __lcpp_y);} 1507 inline _LIBCPP_INLINE_VISIBILITY long double remainder(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return remainderl(__lcpp_x, __lcpp_y);} 1508 1509 template <class _A1, class _A2> 1510 inline _LIBCPP_INLINE_VISIBILITY 1511 typename __lazy_enable_if 1512 < 1513 is_arithmetic<_A1>::value && 1514 is_arithmetic<_A2>::value, 1515 __promote<_A1, _A2> 1516 >::type 1517 remainder(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT 1518 { 1519 typedef typename __promote<_A1, _A2>::type __result_type; 1520 static_assert((!(is_same<_A1, __result_type>::value && 1521 is_same<_A2, __result_type>::value)), ""); 1522 return remainder((__result_type)__lcpp_x, (__result_type)__lcpp_y); 1523 } 1524 1525 // remquo 1526 1527 using ::remquo; 1528 using ::remquof; 1529 1530 inline _LIBCPP_INLINE_VISIBILITY float remquo(float __lcpp_x, float __lcpp_y, int* __lcpp_z) _NOEXCEPT {return remquof(__lcpp_x, __lcpp_y, __lcpp_z);} 1531 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);} 1532 1533 template <class _A1, class _A2> 1534 inline _LIBCPP_INLINE_VISIBILITY 1535 typename __lazy_enable_if 1536 < 1537 is_arithmetic<_A1>::value && 1538 is_arithmetic<_A2>::value, 1539 __promote<_A1, _A2> 1540 >::type 1541 remquo(_A1 __lcpp_x, _A2 __lcpp_y, int* __lcpp_z) _NOEXCEPT 1542 { 1543 typedef typename __promote<_A1, _A2>::type __result_type; 1544 static_assert((!(is_same<_A1, __result_type>::value && 1545 is_same<_A2, __result_type>::value)), ""); 1546 return remquo((__result_type)__lcpp_x, (__result_type)__lcpp_y, __lcpp_z); 1547 } 1548 1549 // rint 1550 1551 using ::rint; 1552 using ::rintf; 1553 1554 inline _LIBCPP_INLINE_VISIBILITY float rint(float __lcpp_x) _NOEXCEPT {return rintf(__lcpp_x);} 1555 inline _LIBCPP_INLINE_VISIBILITY long double rint(long double __lcpp_x) _NOEXCEPT {return rintl(__lcpp_x);} 1556 1557 template <class _A1> 1558 inline _LIBCPP_INLINE_VISIBILITY 1559 typename enable_if<is_integral<_A1>::value, double>::type 1560 rint(_A1 __lcpp_x) _NOEXCEPT {return rint((double)__lcpp_x);} 1561 1562 // round 1563 1564 using ::round; 1565 using ::roundf; 1566 1567 inline _LIBCPP_INLINE_VISIBILITY float round(float __lcpp_x) _NOEXCEPT {return roundf(__lcpp_x);} 1568 inline _LIBCPP_INLINE_VISIBILITY long double round(long double __lcpp_x) _NOEXCEPT {return roundl(__lcpp_x);} 1569 1570 template <class _A1> 1571 inline _LIBCPP_INLINE_VISIBILITY 1572 typename enable_if<is_integral<_A1>::value, double>::type 1573 round(_A1 __lcpp_x) _NOEXCEPT {return round((double)__lcpp_x);} 1574 1575 // scalbln 1576 1577 using ::scalbln; 1578 using ::scalblnf; 1579 1580 inline _LIBCPP_INLINE_VISIBILITY float scalbln(float __lcpp_x, long __lcpp_y) _NOEXCEPT {return scalblnf(__lcpp_x, __lcpp_y);} 1581 inline _LIBCPP_INLINE_VISIBILITY long double scalbln(long double __lcpp_x, long __lcpp_y) _NOEXCEPT {return scalblnl(__lcpp_x, __lcpp_y);} 1582 1583 template <class _A1> 1584 inline _LIBCPP_INLINE_VISIBILITY 1585 typename enable_if<is_integral<_A1>::value, double>::type 1586 scalbln(_A1 __lcpp_x, long __lcpp_y) _NOEXCEPT {return scalbln((double)__lcpp_x, __lcpp_y);} 1587 1588 // scalbn 1589 1590 using ::scalbn; 1591 using ::scalbnf; 1592 1593 inline _LIBCPP_INLINE_VISIBILITY float scalbn(float __lcpp_x, int __lcpp_y) _NOEXCEPT {return scalbnf(__lcpp_x, __lcpp_y);} 1594 inline _LIBCPP_INLINE_VISIBILITY long double scalbn(long double __lcpp_x, int __lcpp_y) _NOEXCEPT {return scalbnl(__lcpp_x, __lcpp_y);} 1595 1596 template <class _A1> 1597 inline _LIBCPP_INLINE_VISIBILITY 1598 typename enable_if<is_integral<_A1>::value, double>::type 1599 scalbn(_A1 __lcpp_x, int __lcpp_y) _NOEXCEPT {return scalbn((double)__lcpp_x, __lcpp_y);} 1600 1601 // tgamma 1602 1603 using ::tgamma; 1604 using ::tgammaf; 1605 1606 inline _LIBCPP_INLINE_VISIBILITY float tgamma(float __lcpp_x) _NOEXCEPT {return tgammaf(__lcpp_x);} 1607 inline _LIBCPP_INLINE_VISIBILITY long double tgamma(long double __lcpp_x) _NOEXCEPT {return tgammal(__lcpp_x);} 1608 1609 template <class _A1> 1610 inline _LIBCPP_INLINE_VISIBILITY 1611 typename enable_if<is_integral<_A1>::value, double>::type 1612 tgamma(_A1 __lcpp_x) _NOEXCEPT {return tgamma((double)__lcpp_x);} 1613 1614 // trunc 1615 1616 using ::trunc; 1617 using ::truncf; 1618 1619 inline _LIBCPP_INLINE_VISIBILITY float trunc(float __lcpp_x) _NOEXCEPT {return truncf(__lcpp_x);} 1620 inline _LIBCPP_INLINE_VISIBILITY long double trunc(long double __lcpp_x) _NOEXCEPT {return truncl(__lcpp_x);} 1621 1622 template <class _A1> 1623 inline _LIBCPP_INLINE_VISIBILITY 1624 typename enable_if<is_integral<_A1>::value, double>::type 1625 trunc(_A1 __lcpp_x) _NOEXCEPT {return trunc((double)__lcpp_x);} 1626 1627 #endif // !_LIBCPP_MSVCRT 1628 1629 using ::acosl; 1630 using ::asinl; 1631 using ::atanl; 1632 using ::atan2l; 1633 using ::ceill; 1634 using ::cosl; 1635 using ::coshl; 1636 using ::expl; 1637 using ::fabsl; 1638 using ::floorl; 1639 using ::fmodl; 1640 using ::frexpl; 1641 using ::ldexpl; 1642 using ::logl; 1643 using ::log10l; 1644 using ::modfl; 1645 using ::powl; 1646 using ::sinl; 1647 using ::sinhl; 1648 using ::sqrtl; 1649 using ::tanl; 1650 #ifndef _LIBCPP_MSVCRT 1651 using ::tanhl; 1652 using ::acoshl; 1653 using ::asinhl; 1654 using ::atanhl; 1655 using ::cbrtl; 1656 #endif // !_LIBCPP_MSVCRT 1657 using ::copysignl; 1658 #ifndef _LIBCPP_MSVCRT 1659 using ::erfl; 1660 using ::erfcl; 1661 using ::exp2l; 1662 using ::expm1l; 1663 using ::fdiml; 1664 using ::fmal; 1665 using ::fmaxl; 1666 using ::fminl; 1667 using ::hypotl; 1668 using ::ilogbl; 1669 using ::lgammal; 1670 using ::llrintl; 1671 using ::llroundl; 1672 using ::log1pl; 1673 using ::log2l; 1674 using ::logbl; 1675 using ::lrintl; 1676 using ::lroundl; 1677 using ::nanl; 1678 using ::nearbyintl; 1679 using ::nextafterl; 1680 using ::nexttowardl; 1681 using ::remainderl; 1682 using ::remquol; 1683 using ::rintl; 1684 using ::roundl; 1685 using ::scalblnl; 1686 using ::scalbnl; 1687 using ::tgammal; 1688 using ::truncl; 1689 #endif // !_LIBCPP_MSVCRT 1690 1691 #else 1692 using ::lgamma; 1693 using ::lgammaf; 1694 #endif // __sun__ 1695 _LIBCPP_END_NAMESPACE_STD 1696 1697 #endif // _LIBCPP_CMATH 1698