16553608aSNikolas Klauser //===----------------------------------------------------------------------===// 26553608aSNikolas Klauser // 36553608aSNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 46553608aSNikolas Klauser // See https://llvm.org/LICENSE.txt for license information. 56553608aSNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 66553608aSNikolas Klauser // 76553608aSNikolas Klauser //===----------------------------------------------------------------------===// 86553608aSNikolas Klauser 96553608aSNikolas Klauser #ifndef _LIBCPP___MATH_ERROR_FUNCTIONS_H 106553608aSNikolas Klauser #define _LIBCPP___MATH_ERROR_FUNCTIONS_H 116553608aSNikolas Klauser 126553608aSNikolas Klauser #include <__config> 136553608aSNikolas Klauser #include <__type_traits/enable_if.h> 146553608aSNikolas Klauser #include <__type_traits/is_integral.h> 156553608aSNikolas Klauser 166553608aSNikolas Klauser #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 176553608aSNikolas Klauser # pragma GCC system_header 186553608aSNikolas Klauser #endif 196553608aSNikolas Klauser 206553608aSNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD 216553608aSNikolas Klauser 226553608aSNikolas Klauser namespace __math { 236553608aSNikolas Klauser 246553608aSNikolas Klauser // erf 256553608aSNikolas Klauser erf(float __x)266553608aSNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI float erf(float __x) _NOEXCEPT { return __builtin_erff(__x); } 276553608aSNikolas Klauser 286553608aSNikolas Klauser template <class = int> erf(double __x)296553608aSNikolas Klauser_LIBCPP_HIDE_FROM_ABI double erf(double __x) _NOEXCEPT { 306553608aSNikolas Klauser return __builtin_erf(__x); 316553608aSNikolas Klauser } 326553608aSNikolas Klauser erf(long double __x)336553608aSNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI long double erf(long double __x) _NOEXCEPT { return __builtin_erfl(__x); } 346553608aSNikolas Klauser 35*f3589d25SNikolas Klauser template <class _A1, __enable_if_t<is_integral<_A1>::value, int> = 0> erf(_A1 __x)36*f3589d25SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI double erf(_A1 __x) _NOEXCEPT { 370e4d812fSNikolas Klauser return __builtin_erf((double)__x); 380e4d812fSNikolas Klauser } 396553608aSNikolas Klauser 406553608aSNikolas Klauser // erfc 416553608aSNikolas Klauser erfc(float __x)426553608aSNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI float erfc(float __x) _NOEXCEPT { return __builtin_erfcf(__x); } 436553608aSNikolas Klauser 446553608aSNikolas Klauser template <class = int> erfc(double __x)456553608aSNikolas Klauser_LIBCPP_HIDE_FROM_ABI double erfc(double __x) _NOEXCEPT { 466553608aSNikolas Klauser return __builtin_erfc(__x); 476553608aSNikolas Klauser } 486553608aSNikolas Klauser erfc(long double __x)496553608aSNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI long double erfc(long double __x) _NOEXCEPT { return __builtin_erfcl(__x); } 506553608aSNikolas Klauser 51*f3589d25SNikolas Klauser template <class _A1, __enable_if_t<is_integral<_A1>::value, int> = 0> erfc(_A1 __x)52*f3589d25SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI double erfc(_A1 __x) _NOEXCEPT { 530e4d812fSNikolas Klauser return __builtin_erfc((double)__x); 540e4d812fSNikolas Klauser } 556553608aSNikolas Klauser 566553608aSNikolas Klauser } // namespace __math 576553608aSNikolas Klauser 586553608aSNikolas Klauser _LIBCPP_END_NAMESPACE_STD 596553608aSNikolas Klauser 606553608aSNikolas Klauser #endif // _LIBCPP___MATH_ERROR_FUNCTIONS_H 61