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 > 201402L
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>
131 constexpr common_type_t<_Mn, _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");
136 static_assert(!is_same_v<remove_cv_t<_Mn>,
bool>,
137 "gcd arguments are not bools");
138 static_assert(!is_same_v<remove_cv_t<_Nn>,
bool>,
139 "gcd arguments are not bools");
140 return __detail::__gcd(__m, __n);
144 template<
typename _Mn,
typename _Nn>
145 constexpr common_type_t<_Mn, _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");
150 static_assert(!is_same_v<remove_cv_t<_Mn>,
bool>,
151 "lcm arguments are not bools");
152 static_assert(!is_same_v<remove_cv_t<_Nn>,
bool>,
153 "lcm arguments are not bools");
159 _GLIBCXX_END_NAMESPACE_VERSION
Parallel STL function calls corresponding to stl_numeric.h. The functions defined here mainly do case...
constexpr common_type_t< _Mn, _Nn > __lcm(_Mn __m, _Nn __n)
Least common multiple.