xref: /llvm-project/libcxx/include/__math/error_functions.h (revision f3589d25fe09a9ec5d05d9ac389109a94f3f6187)
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 Klauser inline _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 Klauser inline _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 Klauser inline _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 Klauser inline _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 Klauser inline _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 Klauser inline _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