55 #ifndef _GLIBCXX_NUMERIC 56 #define _GLIBCXX_NUMERIC 1 58 #pragma GCC system_header 64 #ifdef _GLIBCXX_PARALLEL 77 #if __cplusplus >= 201402L 80 namespace std _GLIBCXX_VISIBILITY(default)
82 _GLIBCXX_BEGIN_NAMESPACE_VERSION
87 template<
typename _Tp>
89 enable_if_t<__and_<is_integral<_Tp>, is_signed<_Tp>>::value, _Tp>
90 __abs_integral(_Tp __val)
91 {
return __val < 0 ? -__val : __val; }
93 template<
typename _Tp>
95 enable_if_t<__and_<is_integral<_Tp>, is_unsigned<_Tp>>::value, _Tp>
96 __abs_integral(_Tp __val)
99 void __abs_integral(
bool) =
delete;
101 template<
typename _Mn,
typename _Nn>
102 constexpr common_type_t<_Mn, _Nn>
103 __gcd(_Mn __m, _Nn __n)
105 return __m == 0 ? __detail::__abs_integral(__n)
106 : __n == 0 ? __detail::__abs_integral(__m)
107 : __detail::__gcd(__n, __m % __n);
111 template<
typename _Mn,
typename _Nn>
112 constexpr common_type_t<_Mn, _Nn>
115 return (__m != 0 && __n != 0)
116 ? (__detail::__abs_integral(__m) / __detail::__gcd(__m, __n))
117 * __detail::__abs_integral(__n)
122 #if __cplusplus >= 201703L 124 #define __cpp_lib_gcd_lcm 201606 126 #define __cpp_lib_gcd 201606 127 #define __cpp_lib_lcm 201606 130 template<
typename _Mn,
typename _Nn>
132 gcd(_Mn __m, _Nn __n)
134 static_assert(is_integral_v<_Mn>,
"gcd arguments are integers");
135 static_assert(is_integral_v<_Nn>,
"gcd arguments are integers");
137 "gcd arguments are not bools");
139 "gcd arguments are not bools");
140 return __detail::__gcd(__m, __n);
144 template<
typename _Mn,
typename _Nn>
146 lcm(_Mn __m, _Nn __n)
148 static_assert(is_integral_v<_Mn>,
"lcm arguments are integers");
149 static_assert(is_integral_v<_Nn>,
"lcm arguments are integers");
151 "lcm arguments are not bools");
153 "lcm arguments are not bools");
159 #if __cplusplus > 201703L 161 # define __cpp_lib_interpolate 201902L 163 template<
typename _Tp>
166 __not_<is_same<_Tp, bool>>>::value,
168 midpoint(_Tp __a, _Tp __b) noexcept
170 if constexpr (is_integral_v<_Tp>)
183 return __a + __k * _Tp(_Up(__M - __m) / 2);
187 return __builtin_isnormal(__a) && __builtin_isnormal(__b)
193 template<
typename _Tp>
197 midpoint(_Tp* __a, _Tp* __b) noexcept
199 return __a > __b ? __b + (__a - __b) / 2 : __a + (__b - __a) / 2;
203 _GLIBCXX_END_NAMESPACE_VERSION
208 #if __cplusplus > 201402L 210 # if __PSTL_EXECUTION_POLICIES_DEFINED 212 # include <pstl/glue_numeric_impl.h> 215 # include <pstl/glue_numeric_defs.h> 216 # define __PSTL_NUMERIC_FORWARD_DECLARED 1 220 # define __cpp_lib_parallel_algorithm 201703L typename enable_if< _Cond, _Tp >::type enable_if_t
Alias template for enable_if.
ISO C++ entities toplevel namespace is std.
typename remove_cv< _Tp >::type remove_cv_t
Alias template for remove_cv.
constexpr common_type_t< _Mn, _Nn > __lcm(_Mn __m, _Nn __n)
Least common multiple.
typename make_unsigned< _Tp >::type make_unsigned_t
Alias template for make_unsigned.
Parallel STL function calls corresponding to stl_numeric.h. The functions defined here mainly do case...
typename common_type< _Tp... >::type common_type_t
Alias template for common_type.