Hi,
tested x86_64-linux, committed to mainline.
Paolo.
PS: will add separately tests for the C++11 <cmath> facilities.
//////////////
2011-08-12 Paolo Carlini <[email protected]>
* include/c_global/cmath (fmod(_Tp, _Up)): Add.
* include/c_std/cmath: Likewise.
Index: include/c_std/cmath
===================================================================
--- include/c_std/cmath (revision 177696)
+++ include/c_std/cmath (working copy)
@@ -268,6 +268,13 @@
fmod(long double __x, long double __y)
{ return __builtin_fmodl(__x, __y); }
+ template<typename _Tp, typename _Up>
+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value
+ && __is_integer<_Up>::__value,
+ double>::__type
+ fmod(_Tp __x, _Up __y)
+ { return __builtin_fmod(__x, __y); }
+
using ::frexp;
inline float
Index: include/c_global/cmath
===================================================================
--- include/c_global/cmath (revision 177696)
+++ include/c_global/cmath (working copy)
@@ -282,6 +282,18 @@
fmod(long double __x, long double __y)
{ return __builtin_fmodl(__x, __y); }
+ template<typename _Tp, typename _Up>
+ inline _GLIBCXX_CONSTEXPR
+ typename __gnu_cxx::__promote_2<
+ typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value
+ && __is_arithmetic<_Up>::__value,
+ _Tp>::__type, _Up>::__type
+ fmod(_Tp __x, _Up __y)
+ {
+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+ return fmod(__type(__x), __type(__y));
+ }
+
using ::frexp;
inline _GLIBCXX_CONSTEXPR float
@@ -313,8 +325,8 @@
inline _GLIBCXX_CONSTEXPR
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
- ldexp(_Tp __x, int __exp)
- { return __builtin_ldexp(__x, __exp); }
+ ldexp(_Tp __x, int __exp)
+ { return __builtin_ldexp(__x, __exp); }
using ::log;