mirror of git://gcc.gnu.org/git/gcc.git
Define C++17 std::hypot without _GLIBCXX_USE_C99_MATH_TR1
* include/c_global/cmath (hypot, __hypot3): Move C++17 overloads outside _GLIBCXX_USE_C99_MATH_TR1 condition. From-SVN: r240620
This commit is contained in:
parent
a9087411ad
commit
998e01a6d5
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-09-29 Jonathan Wakely <jwakely@redhat.com>
|
||||||
|
|
||||||
|
* include/c_global/cmath (hypot, __hypot3): Move C++17 overloads
|
||||||
|
outside _GLIBCXX_USE_C99_MATH_TR1 condition.
|
||||||
|
|
||||||
2016-09-29 Alan Modra <amodra@gmail.com>
|
2016-09-29 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* configure.ac (LONG_DOUBLE_COMPAT_FLAGS): New ACSUBST.
|
* configure.ac (LONG_DOUBLE_COMPAT_FLAGS): New ACSUBST.
|
||||||
|
|
|
||||||
|
|
@ -1455,46 +1455,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
return hypot(__type(__x), __type(__y));
|
return hypot(__type(__x), __type(__y));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __cplusplus > 201402L
|
|
||||||
#define __cpp_lib_hypot 201603
|
|
||||||
// [c.math.hypot3], three-dimensional hypotenuse
|
|
||||||
|
|
||||||
template<typename _Tp>
|
|
||||||
inline _Tp
|
|
||||||
__hypot3(_Tp __x, _Tp __y, _Tp __z)
|
|
||||||
{
|
|
||||||
__x = std::abs(__x);
|
|
||||||
__y = std::abs(__y);
|
|
||||||
__z = std::abs(__z);
|
|
||||||
if (_Tp __a = __x < __y ? __y < __z ? __z : __y : __x < __z ? __z : __x)
|
|
||||||
return __a * std::sqrt((__x / __a) * (__x / __a)
|
|
||||||
+ (__y / __a) * (__y / __a)
|
|
||||||
+ (__z / __a) * (__z / __a));
|
|
||||||
else
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
inline float
|
|
||||||
hypot(float __x, float __y, float __z)
|
|
||||||
{ return std::__hypot3<float>(__x, __y, __z); }
|
|
||||||
|
|
||||||
inline double
|
|
||||||
hypot(double __x, double __y, double __z)
|
|
||||||
{ return std::__hypot3<double>(__x, __y, __z); }
|
|
||||||
|
|
||||||
inline long double
|
|
||||||
hypot(long double __x, long double __y, long double __z)
|
|
||||||
{ return std::__hypot3<long double>(__x, __y, __z); }
|
|
||||||
|
|
||||||
template<typename _Tp, typename _Up, typename _Vp>
|
|
||||||
typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
|
|
||||||
hypot(_Tp __x, _Up __y, _Vp __z)
|
|
||||||
{
|
|
||||||
using __type = typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type;
|
|
||||||
return std::__hypot3<__type>(__x, __y, __z);
|
|
||||||
}
|
|
||||||
#endif // C++17
|
|
||||||
|
|
||||||
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
|
#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO
|
||||||
constexpr int
|
constexpr int
|
||||||
ilogb(float __x)
|
ilogb(float __x)
|
||||||
|
|
@ -1830,6 +1790,53 @@ _GLIBCXX_END_NAMESPACE_VERSION
|
||||||
|
|
||||||
#endif // C++11
|
#endif // C++11
|
||||||
|
|
||||||
|
#if __cplusplus > 201402L
|
||||||
|
namespace std _GLIBCXX_VISIBILITY(default)
|
||||||
|
{
|
||||||
|
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
|
|
||||||
|
// [c.math.hypot3], three-dimensional hypotenuse
|
||||||
|
#define __cpp_lib_hypot 201603
|
||||||
|
|
||||||
|
template<typename _Tp>
|
||||||
|
inline _Tp
|
||||||
|
__hypot3(_Tp __x, _Tp __y, _Tp __z)
|
||||||
|
{
|
||||||
|
__x = std::abs(__x);
|
||||||
|
__y = std::abs(__y);
|
||||||
|
__z = std::abs(__z);
|
||||||
|
if (_Tp __a = __x < __y ? __y < __z ? __z : __y : __x < __z ? __z : __x)
|
||||||
|
return __a * std::sqrt((__x / __a) * (__x / __a)
|
||||||
|
+ (__y / __a) * (__y / __a)
|
||||||
|
+ (__z / __a) * (__z / __a));
|
||||||
|
else
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float
|
||||||
|
hypot(float __x, float __y, float __z)
|
||||||
|
{ return std::__hypot3<float>(__x, __y, __z); }
|
||||||
|
|
||||||
|
inline double
|
||||||
|
hypot(double __x, double __y, double __z)
|
||||||
|
{ return std::__hypot3<double>(__x, __y, __z); }
|
||||||
|
|
||||||
|
inline long double
|
||||||
|
hypot(long double __x, long double __y, long double __z)
|
||||||
|
{ return std::__hypot3<long double>(__x, __y, __z); }
|
||||||
|
|
||||||
|
template<typename _Tp, typename _Up, typename _Vp>
|
||||||
|
typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
|
||||||
|
hypot(_Tp __x, _Up __y, _Vp __z)
|
||||||
|
{
|
||||||
|
using __type = typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type;
|
||||||
|
return std::__hypot3<__type>(__x, __y, __z);
|
||||||
|
}
|
||||||
|
_GLIBCXX_END_NAMESPACE_VERSION
|
||||||
|
} // namespace
|
||||||
|
#endif // C++17
|
||||||
|
|
||||||
|
|
||||||
#if _GLIBCXX_USE_STD_SPEC_FUNCS
|
#if _GLIBCXX_USE_STD_SPEC_FUNCS
|
||||||
# include <bits/specfun.h>
|
# include <bits/specfun.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue