// TR1 cmath -*- C++ -*-// Copyright (C) 2007 Free Software Foundation, Inc.//// This file is part of the GNU ISO C++ Library. This library is free// software; you can redistribute it and/or modify it under the// terms of the GNU General Public License as published by the// Free Software Foundation; either version 2, or (at your option)// any later version.// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License along// with this library; see the file COPYING. If not, write to the Free// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,// USA.// As a special exception, you may use this file as part of a free software// library without restriction. Specifically, if other files instantiate// templates or use macros or inline functions from this file, or you compile// this file and link it with other files to produce an executable, this// file does not by itself cause the resulting executable to be covered by// the GNU General Public License. This exception does not however// invalidate any other reasons why the executable file might be covered by// the GNU General Public License./** @file tr1_impl/cmath* This is an internal header file, included by other library headers.* You should not attempt to use it directly.*/#if _GLIBCXX_USE_C99_MATH_TR1#undef acosh#undef acoshf#undef acoshl#undef asinh#undef asinhf#undef asinhl#undef atanh#undef atanhf#undef atanhl#undef cbrt#undef cbrtf#undef cbrtl#undef copysign#undef copysignf#undef copysignl#undef erf#undef erff#undef erfl#undef erfc#undef erfcf#undef erfcl#undef exp2#undef exp2f#undef exp2l#undef expm1#undef expm1f#undef expm1l#undef fdim#undef fdimf#undef fdiml#undef fma#undef fmaf#undef fmal#undef fmax#undef fmaxf#undef fmaxl#undef fmin#undef fminf#undef fminl#undef hypot#undef hypotf#undef hypotl#undef ilogb#undef ilogbf#undef ilogbl#undef lgamma#undef lgammaf#undef lgammal#undef llrint#undef llrintf#undef llrintl#undef llround#undef llroundf#undef llroundl#undef log1p#undef log1pf#undef log1pl#undef log2#undef log2f#undef log2l#undef logb#undef logbf#undef logbl#undef lrint#undef lrintf#undef lrintl#undef lround#undef lroundf#undef lroundl#undef nan#undef nanf#undef nanl#undef nearbyint#undef nearbyintf#undef nearbyintl#undef nextafter#undef nextafterf#undef nextafterl#undef nexttoward#undef nexttowardf#undef nexttowardl#undef remainder#undef remainderf#undef remainderl#undef remquo#undef remquo#undef remquo#undef rint#undef rintf#undef rintl#undef round#undef roundf#undef roundl#undef scalbln#undef scalblnf#undef scalblnl#undef scalbn#undef scalbnf#undef scalbnl#undef tgamma#undef tgammaf#undef tgammal#undef trunc#undef truncf#undef truncl#endifnamespace std{_GLIBCXX_BEGIN_NAMESPACE_TR1#if _GLIBCXX_USE_C99_MATH_TR1// typesusing ::double_t;using ::float_t;// functionsusing ::acosh;using ::acoshf;using ::acoshl;using ::asinh;using ::asinhf;using ::asinhl;using ::atanh;using ::atanhf;using ::atanhl;using ::cbrt;using ::cbrtf;using ::cbrtl;using ::copysign;using ::copysignf;using ::copysignl;using ::erf;using ::erff;using ::erfl;using ::erfc;using ::erfcf;using ::erfcl;using ::exp2;using ::exp2f;using ::exp2l;using ::expm1;using ::expm1f;using ::expm1l;using ::fdim;using ::fdimf;using ::fdiml;using ::fma;using ::fmaf;using ::fmal;using ::fmax;using ::fmaxf;using ::fmaxl;using ::fmin;using ::fminf;using ::fminl;using ::hypot;using ::hypotf;using ::hypotl;using ::ilogb;using ::ilogbf;using ::ilogbl;using ::lgamma;using ::lgammaf;using ::lgammal;using ::llrint;using ::llrintf;using ::llrintl;using ::llround;using ::llroundf;using ::llroundl;using ::log1p;using ::log1pf;using ::log1pl;using ::log2;using ::log2f;using ::log2l;using ::logb;using ::logbf;using ::logbl;using ::lrint;using ::lrintf;using ::lrintl;using ::lround;using ::lroundf;using ::lroundl;using ::nan;using ::nanf;using ::nanl;using ::nearbyint;using ::nearbyintf;using ::nearbyintl;using ::nextafter;using ::nextafterf;using ::nextafterl;using ::nexttoward;using ::nexttowardf;using ::nexttowardl;using ::remainder;using ::remainderf;using ::remainderl;using ::remquo;using ::remquo;using ::remquo;using ::rint;using ::rintf;using ::rintl;using ::round;using ::roundf;using ::roundl;using ::scalbln;using ::scalblnf;using ::scalblnl;using ::scalbn;using ::scalbnf;using ::scalbnl;using ::tgamma;using ::tgammaf;using ::tgammal;using ::trunc;using ::truncf;using ::truncl;#endif#if _GLIBCXX_USE_C99_MATH#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC/// Function template definitions [8.16.3].using std::signbit;using std::fpclassify;using std::isfinite;using std::isinf;using std::isnan;using std::isnormal;using std::isgreater;using std::isgreaterequal;using std::isless;using std::islessequal;using std::islessgreater;using std::isunordered;#endif#endif#if _GLIBCXX_USE_C99_MATH_TR1/// Additional overloads [8.16.4].using std::acos;inline floatacosh(float __x){ return __builtin_acoshf(__x); }inline long doubleacosh(long double __x){ return __builtin_acoshl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typeacosh(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return acosh(__type(__x));}using std::asin;inline floatasinh(float __x){ return __builtin_asinhf(__x); }inline long doubleasinh(long double __x){ return __builtin_asinhl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typeasinh(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return asinh(__type(__x));}using std::atan;using std::atan2;inline floatatanh(float __x){ return __builtin_atanhf(__x); }inline long doubleatanh(long double __x){ return __builtin_atanhl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typeatanh(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return atanh(__type(__x));}inline floatcbrt(float __x){ return __builtin_cbrtf(__x); }inline long doublecbrt(long double __x){ return __builtin_cbrtl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typecbrt(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return cbrt(__type(__x));}using std::ceil;inline floatcopysign(float __x, float __y){ return __builtin_copysignf(__x, __y); }inline long doublecopysign(long double __x, long double __y){ return __builtin_copysignl(__x, __y); }template<typename _Tp, typename _Up>inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__typecopysign(_Tp __x, _Up __y){typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;return copysign(__type(__x), __type(__y));}using std::cos;using std::cosh;inline floaterf(float __x){ return __builtin_erff(__x); }inline long doubleerf(long double __x){ return __builtin_erfl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typeerf(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return erf(__type(__x));}inline floaterfc(float __x){ return __builtin_erfcf(__x); }inline long doubleerfc(long double __x){ return __builtin_erfcl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typeerfc(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return erfc(__type(__x));}using std::exp;inline floatexp2(float __x){ return __builtin_exp2f(__x); }inline long doubleexp2(long double __x){ return __builtin_exp2l(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typeexp2(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return exp2(__type(__x));}inline floatexpm1(float __x){ return __builtin_expm1f(__x); }inline long doubleexpm1(long double __x){ return __builtin_expm1l(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typeexpm1(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return expm1(__type(__x));}using std::fabs;inline floatfdim(float __x, float __y){ return __builtin_fdimf(__x, __y); }inline long doublefdim(long double __x, long double __y){ return __builtin_fdiml(__x, __y); }template<typename _Tp, typename _Up>inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__typefdim(_Tp __x, _Up __y){typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;return fdim(__type(__x), __type(__y));}using std::floor;inline floatfma(float __x, float __y, float __z){ return __builtin_fmaf(__x, __y, __z); }inline long doublefma(long double __x, long double __y, long double __z){ return __builtin_fmal(__x, __y, __z); }template<typename _Tp, typename _Up, typename _Vp>inline typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__typefma(_Tp __x, _Up __y, _Vp __z){typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;return fma(__type(__x), __type(__y), __type(__z));}inline floatfmax(float __x, float __y){ return __builtin_fmaxf(__x, __y); }inline long doublefmax(long double __x, long double __y){ return __builtin_fmaxl(__x, __y); }template<typename _Tp, typename _Up>inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__typefmax(_Tp __x, _Up __y){typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;return fmax(__type(__x), __type(__y));}inline floatfmin(float __x, float __y){ return __builtin_fminf(__x, __y); }inline long doublefmin(long double __x, long double __y){ return __builtin_fminl(__x, __y); }template<typename _Tp, typename _Up>inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__typefmin(_Tp __x, _Up __y){typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;return fmin(__type(__x), __type(__y));}using std::fmod;using std::frexp;inline floathypot(float __x, float __y){ return __builtin_hypotf(__x, __y); }inline long doublehypot(long double __x, long double __y){ return __builtin_hypotl(__x, __y); }template<typename _Tp, typename _Up>inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__typehypot(_Tp __x, _Up __y){typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;return hypot(__type(__x), __type(__y));}inline intilogb(float __x){ return __builtin_ilogbf(__x); }inline intilogb(long double __x){ return __builtin_ilogbl(__x); }template<typename _Tp>inline intilogb(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return ilogb(__type(__x));}using std::ldexp;inline floatlgamma(float __x){ return __builtin_lgammaf(__x); }inline long doublelgamma(long double __x){ return __builtin_lgammal(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typelgamma(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return lgamma(__type(__x));}inline long longllrint(float __x){ return __builtin_llrintf(__x); }inline long longllrint(long double __x){ return __builtin_llrintl(__x); }template<typename _Tp>inline long longllrint(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return llrint(__type(__x));}inline long longllround(float __x){ return __builtin_llroundf(__x); }inline long longllround(long double __x){ return __builtin_llroundl(__x); }template<typename _Tp>inline long longllround(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return llround(__type(__x));}using std::log;using std::log10;inline floatlog1p(float __x){ return __builtin_log1pf(__x); }inline long doublelog1p(long double __x){ return __builtin_log1pl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typelog1p(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return log1p(__type(__x));}// DR 568.inline floatlog2(float __x){ return __builtin_log2f(__x); }inline long doublelog2(long double __x){ return __builtin_log2l(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typelog2(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return log2(__type(__x));}inline floatlogb(float __x){ return __builtin_logbf(__x); }inline long doublelogb(long double __x){ return __builtin_logbl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typelogb(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return logb(__type(__x));}inline longlrint(float __x){ return __builtin_lrintf(__x); }inline longlrint(long double __x){ return __builtin_lrintl(__x); }template<typename _Tp>inline longlrint(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return lrint(__type(__x));}inline longlround(float __x){ return __builtin_lroundf(__x); }inline longlround(long double __x){ return __builtin_lroundl(__x); }template<typename _Tp>inline longlround(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return lround(__type(__x));}inline floatnearbyint(float __x){ return __builtin_nearbyintf(__x); }inline long doublenearbyint(long double __x){ return __builtin_nearbyintl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typenearbyint(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return nearbyint(__type(__x));}inline floatnextafter(float __x, float __y){ return __builtin_nextafterf(__x, __y); }inline long doublenextafter(long double __x, long double __y){ return __builtin_nextafterl(__x, __y); }template<typename _Tp, typename _Up>inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__typenextafter(_Tp __x, _Up __y){typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;return nextafter(__type(__x), __type(__y));}inline floatnexttoward(float __x, long double __y){ return __builtin_nexttowardf(__x, __y); }inline long doublenexttoward(long double __x, long double __y){ return __builtin_nexttowardl(__x, __y); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typenexttoward(_Tp __x, long double __y){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return nexttoward(__type(__x), __y);}using std::pow;inline floatremainder(float __x, float __y){ return __builtin_remainderf(__x, __y); }inline long doubleremainder(long double __x, long double __y){ return __builtin_remainderl(__x, __y); }template<typename _Tp, typename _Up>inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__typeremainder(_Tp __x, _Up __y){typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;return remainder(__type(__x), __type(__y));}inline floatremquo(float __x, float __y, int* __pquo){ return __builtin_remquof(__x, __y, __pquo); }inline long doubleremquo(long double __x, long double __y, int* __pquo){ return __builtin_remquol(__x, __y, __pquo); }template<typename _Tp, typename _Up>inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__typeremquo(_Tp __x, _Up __y, int* __pquo){typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;return remquo(__type(__x), __type(__y), __pquo);}inline floatrint(float __x){ return __builtin_rintf(__x); }inline long doublerint(long double __x){ return __builtin_rintl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typerint(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return rint(__type(__x));}inline floatround(float __x){ return __builtin_roundf(__x); }inline long doubleround(long double __x){ return __builtin_roundl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typeround(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return round(__type(__x));}inline floatscalbln(float __x, long __ex){ return __builtin_scalblnf(__x, __ex); }inline long doublescalbln(long double __x, long __ex){ return __builtin_scalblnl(__x, __ex); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typescalbln(_Tp __x, long __ex){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return scalbln(__type(__x), __ex);}inline floatscalbn(float __x, int __ex){ return __builtin_scalbnf(__x, __ex); }inline long doublescalbn(long double __x, int __ex){ return __builtin_scalbnl(__x, __ex); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typescalbn(_Tp __x, int __ex){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return scalbn(__type(__x), __ex);}using std::sin;using std::sinh;using std::sqrt;using std::tan;using std::tanh;inline floattgamma(float __x){ return __builtin_tgammaf(__x); }inline long doubletgamma(long double __x){ return __builtin_tgammal(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typetgamma(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return tgamma(__type(__x));}inline floattrunc(float __x){ return __builtin_truncf(__x); }inline long doubletrunc(long double __x){ return __builtin_truncl(__x); }template<typename _Tp>inline typename __gnu_cxx::__promote<_Tp>::__typetrunc(_Tp __x){typedef typename __gnu_cxx::__promote<_Tp>::__type __type;return trunc(__type(__x));}#endif_GLIBCXX_END_NAMESPACE_TR1}