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)
84 _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)
121 _GLIBCXX_END_NAMESPACE_VERSION
124 _GLIBCXX_BEGIN_NAMESPACE_VERSION
126 #if __cplusplus > 201402L 128 #define __cpp_lib_gcd_lcm 201606 130 #define __cpp_lib_gcd 201606 131 #define __cpp_lib_lcm 201606 134 template<
typename _Mn,
typename _Nn>
135 constexpr common_type_t<_Mn, _Nn>
136 gcd(_Mn __m, _Nn __n)
140 static_assert(!is_same<_Mn, bool>::value,
"gcd arguments are not bools");
141 static_assert(!is_same<_Nn, bool>::value,
"gcd arguments are not bools");
142 return __detail::__gcd(__m, __n);
146 template<
typename _Mn,
typename _Nn>
147 constexpr common_type_t<_Mn, _Nn>
148 lcm(_Mn __m, _Nn __n)
152 static_assert(!is_same<_Mn, bool>::value,
"lcm arguments are not bools");
153 static_assert(!is_same<_Nn, bool>::value,
"lcm arguments are not bools");
159 _GLIBCXX_END_NAMESPACE_VERSION
ISO C++ entities toplevel namespace is std.
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.