1*e4b17023SJohn Marino// -*- C++ -*- C forwarding header. 2*e4b17023SJohn Marino 3*e4b17023SJohn Marino// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 4*e4b17023SJohn Marino// 2006, 2007, 2008, 2009, 2010, 2011 5*e4b17023SJohn Marino// Free Software Foundation, Inc. 6*e4b17023SJohn Marino// 7*e4b17023SJohn Marino// This file is part of the GNU ISO C++ Library. This library is free 8*e4b17023SJohn Marino// software; you can redistribute it and/or modify it under the 9*e4b17023SJohn Marino// terms of the GNU General Public License as published by the 10*e4b17023SJohn Marino// Free Software Foundation; either version 3, or (at your option) 11*e4b17023SJohn Marino// any later version. 12*e4b17023SJohn Marino 13*e4b17023SJohn Marino// This library is distributed in the hope that it will be useful, 14*e4b17023SJohn Marino// but WITHOUT ANY WARRANTY; without even the implied warranty of 15*e4b17023SJohn Marino// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*e4b17023SJohn Marino// GNU General Public License for more details. 17*e4b17023SJohn Marino 18*e4b17023SJohn Marino// Under Section 7 of GPL version 3, you are granted additional 19*e4b17023SJohn Marino// permissions described in the GCC Runtime Library Exception, version 20*e4b17023SJohn Marino// 3.1, as published by the Free Software Foundation. 21*e4b17023SJohn Marino 22*e4b17023SJohn Marino// You should have received a copy of the GNU General Public License and 23*e4b17023SJohn Marino// a copy of the GCC Runtime Library Exception along with this program; 24*e4b17023SJohn Marino// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 25*e4b17023SJohn Marino// <http://www.gnu.org/licenses/>. 26*e4b17023SJohn Marino 27*e4b17023SJohn Marino/** @file include/cmath 28*e4b17023SJohn Marino * This is a Standard C++ Library file. You should @c \#include this file 29*e4b17023SJohn Marino * in your programs, rather than any of the @a *.h implementation files. 30*e4b17023SJohn Marino * 31*e4b17023SJohn Marino * This is the C++ version of the Standard C Library header @c math.h, 32*e4b17023SJohn Marino * and its contents are (mostly) the same as that header, but are all 33*e4b17023SJohn Marino * contained in the namespace @c std (except for names which are defined 34*e4b17023SJohn Marino * as macros in C). 35*e4b17023SJohn Marino */ 36*e4b17023SJohn Marino 37*e4b17023SJohn Marino// 38*e4b17023SJohn Marino// ISO C++ 14882: 26.5 C library 39*e4b17023SJohn Marino// 40*e4b17023SJohn Marino 41*e4b17023SJohn Marino#pragma GCC system_header 42*e4b17023SJohn Marino 43*e4b17023SJohn Marino#include <bits/c++config.h> 44*e4b17023SJohn Marino#include <bits/cpp_type_traits.h> 45*e4b17023SJohn Marino#include <ext/type_traits.h> 46*e4b17023SJohn Marino#include <math.h> 47*e4b17023SJohn Marino 48*e4b17023SJohn Marino#ifndef _GLIBCXX_CMATH 49*e4b17023SJohn Marino#define _GLIBCXX_CMATH 1 50*e4b17023SJohn Marino 51*e4b17023SJohn Marino// Get rid of those macros defined in <math.h> in lieu of real functions. 52*e4b17023SJohn Marino#undef abs 53*e4b17023SJohn Marino#undef div 54*e4b17023SJohn Marino#undef acos 55*e4b17023SJohn Marino#undef asin 56*e4b17023SJohn Marino#undef atan 57*e4b17023SJohn Marino#undef atan2 58*e4b17023SJohn Marino#undef ceil 59*e4b17023SJohn Marino#undef cos 60*e4b17023SJohn Marino#undef cosh 61*e4b17023SJohn Marino#undef exp 62*e4b17023SJohn Marino#undef fabs 63*e4b17023SJohn Marino#undef floor 64*e4b17023SJohn Marino#undef fmod 65*e4b17023SJohn Marino#undef frexp 66*e4b17023SJohn Marino#undef ldexp 67*e4b17023SJohn Marino#undef log 68*e4b17023SJohn Marino#undef log10 69*e4b17023SJohn Marino#undef modf 70*e4b17023SJohn Marino#undef pow 71*e4b17023SJohn Marino#undef sin 72*e4b17023SJohn Marino#undef sinh 73*e4b17023SJohn Marino#undef sqrt 74*e4b17023SJohn Marino#undef tan 75*e4b17023SJohn Marino#undef tanh 76*e4b17023SJohn Marino 77*e4b17023SJohn Marinonamespace std _GLIBCXX_VISIBILITY(default) 78*e4b17023SJohn Marino{ 79*e4b17023SJohn Marino_GLIBCXX_BEGIN_NAMESPACE_VERSION 80*e4b17023SJohn Marino 81*e4b17023SJohn Marino#if !defined(__CORRECT_ISO_CPP_MATH_H_PROTO1) \ 82*e4b17023SJohn Marino && !defined(__CORRECT_ISO_CPP_MATH_H_PROTO2) 83*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR double 84*e4b17023SJohn Marino abs(double __x) 85*e4b17023SJohn Marino { return __builtin_fabs(__x); } 86*e4b17023SJohn Marino#endif 87*e4b17023SJohn Marino 88*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 89*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 90*e4b17023SJohn Marino abs(float __x) 91*e4b17023SJohn Marino { return __builtin_fabsf(__x); } 92*e4b17023SJohn Marino 93*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 94*e4b17023SJohn Marino abs(long double __x) 95*e4b17023SJohn Marino { return __builtin_fabsl(__x); } 96*e4b17023SJohn Marino#endif 97*e4b17023SJohn Marino 98*e4b17023SJohn Marino template<typename _Tp> 99*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 100*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 101*e4b17023SJohn Marino double>::__type 102*e4b17023SJohn Marino abs(_Tp __x) 103*e4b17023SJohn Marino { return __builtin_fabs(__x); } 104*e4b17023SJohn Marino 105*e4b17023SJohn Marino using ::acos; 106*e4b17023SJohn Marino 107*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 108*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 109*e4b17023SJohn Marino acos(float __x) 110*e4b17023SJohn Marino { return __builtin_acosf(__x); } 111*e4b17023SJohn Marino 112*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 113*e4b17023SJohn Marino acos(long double __x) 114*e4b17023SJohn Marino { return __builtin_acosl(__x); } 115*e4b17023SJohn Marino#endif 116*e4b17023SJohn Marino 117*e4b17023SJohn Marino template<typename _Tp> 118*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 119*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 120*e4b17023SJohn Marino double>::__type 121*e4b17023SJohn Marino acos(_Tp __x) 122*e4b17023SJohn Marino { return __builtin_acos(__x); } 123*e4b17023SJohn Marino 124*e4b17023SJohn Marino using ::asin; 125*e4b17023SJohn Marino 126*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 127*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 128*e4b17023SJohn Marino asin(float __x) 129*e4b17023SJohn Marino { return __builtin_asinf(__x); } 130*e4b17023SJohn Marino 131*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 132*e4b17023SJohn Marino asin(long double __x) 133*e4b17023SJohn Marino { return __builtin_asinl(__x); } 134*e4b17023SJohn Marino#endif 135*e4b17023SJohn Marino 136*e4b17023SJohn Marino template<typename _Tp> 137*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 138*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 139*e4b17023SJohn Marino double>::__type 140*e4b17023SJohn Marino asin(_Tp __x) 141*e4b17023SJohn Marino { return __builtin_asin(__x); } 142*e4b17023SJohn Marino 143*e4b17023SJohn Marino using ::atan; 144*e4b17023SJohn Marino 145*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 146*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 147*e4b17023SJohn Marino atan(float __x) 148*e4b17023SJohn Marino { return __builtin_atanf(__x); } 149*e4b17023SJohn Marino 150*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 151*e4b17023SJohn Marino atan(long double __x) 152*e4b17023SJohn Marino { return __builtin_atanl(__x); } 153*e4b17023SJohn Marino#endif 154*e4b17023SJohn Marino 155*e4b17023SJohn Marino template<typename _Tp> 156*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 157*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 158*e4b17023SJohn Marino double>::__type 159*e4b17023SJohn Marino atan(_Tp __x) 160*e4b17023SJohn Marino { return __builtin_atan(__x); } 161*e4b17023SJohn Marino 162*e4b17023SJohn Marino using ::atan2; 163*e4b17023SJohn Marino 164*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 165*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 166*e4b17023SJohn Marino atan2(float __y, float __x) 167*e4b17023SJohn Marino { return __builtin_atan2f(__y, __x); } 168*e4b17023SJohn Marino 169*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 170*e4b17023SJohn Marino atan2(long double __y, long double __x) 171*e4b17023SJohn Marino { return __builtin_atan2l(__y, __x); } 172*e4b17023SJohn Marino#endif 173*e4b17023SJohn Marino 174*e4b17023SJohn Marino template<typename _Tp, typename _Up> 175*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 176*e4b17023SJohn Marino typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 177*e4b17023SJohn Marino atan2(_Tp __y, _Up __x) 178*e4b17023SJohn Marino { 179*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 180*e4b17023SJohn Marino return atan2(__type(__y), __type(__x)); 181*e4b17023SJohn Marino } 182*e4b17023SJohn Marino 183*e4b17023SJohn Marino using ::ceil; 184*e4b17023SJohn Marino 185*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 186*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 187*e4b17023SJohn Marino ceil(float __x) 188*e4b17023SJohn Marino { return __builtin_ceilf(__x); } 189*e4b17023SJohn Marino 190*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 191*e4b17023SJohn Marino ceil(long double __x) 192*e4b17023SJohn Marino { return __builtin_ceill(__x); } 193*e4b17023SJohn Marino#endif 194*e4b17023SJohn Marino 195*e4b17023SJohn Marino template<typename _Tp> 196*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 197*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 198*e4b17023SJohn Marino double>::__type 199*e4b17023SJohn Marino ceil(_Tp __x) 200*e4b17023SJohn Marino { return __builtin_ceil(__x); } 201*e4b17023SJohn Marino 202*e4b17023SJohn Marino using ::cos; 203*e4b17023SJohn Marino 204*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 205*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 206*e4b17023SJohn Marino cos(float __x) 207*e4b17023SJohn Marino { return __builtin_cosf(__x); } 208*e4b17023SJohn Marino 209*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 210*e4b17023SJohn Marino cos(long double __x) 211*e4b17023SJohn Marino { return __builtin_cosl(__x); } 212*e4b17023SJohn Marino#endif 213*e4b17023SJohn Marino 214*e4b17023SJohn Marino template<typename _Tp> 215*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 216*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 217*e4b17023SJohn Marino double>::__type 218*e4b17023SJohn Marino cos(_Tp __x) 219*e4b17023SJohn Marino { return __builtin_cos(__x); } 220*e4b17023SJohn Marino 221*e4b17023SJohn Marino using ::cosh; 222*e4b17023SJohn Marino 223*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 224*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 225*e4b17023SJohn Marino cosh(float __x) 226*e4b17023SJohn Marino { return __builtin_coshf(__x); } 227*e4b17023SJohn Marino 228*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 229*e4b17023SJohn Marino cosh(long double __x) 230*e4b17023SJohn Marino { return __builtin_coshl(__x); } 231*e4b17023SJohn Marino#endif 232*e4b17023SJohn Marino 233*e4b17023SJohn Marino template<typename _Tp> 234*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 235*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 236*e4b17023SJohn Marino double>::__type 237*e4b17023SJohn Marino cosh(_Tp __x) 238*e4b17023SJohn Marino { return __builtin_cosh(__x); } 239*e4b17023SJohn Marino 240*e4b17023SJohn Marino using ::exp; 241*e4b17023SJohn Marino 242*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 243*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 244*e4b17023SJohn Marino exp(float __x) 245*e4b17023SJohn Marino { return __builtin_expf(__x); } 246*e4b17023SJohn Marino 247*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 248*e4b17023SJohn Marino exp(long double __x) 249*e4b17023SJohn Marino { return __builtin_expl(__x); } 250*e4b17023SJohn Marino#endif 251*e4b17023SJohn Marino 252*e4b17023SJohn Marino template<typename _Tp> 253*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 254*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 255*e4b17023SJohn Marino double>::__type 256*e4b17023SJohn Marino exp(_Tp __x) 257*e4b17023SJohn Marino { return __builtin_exp(__x); } 258*e4b17023SJohn Marino 259*e4b17023SJohn Marino using ::fabs; 260*e4b17023SJohn Marino 261*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 262*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 263*e4b17023SJohn Marino fabs(float __x) 264*e4b17023SJohn Marino { return __builtin_fabsf(__x); } 265*e4b17023SJohn Marino 266*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 267*e4b17023SJohn Marino fabs(long double __x) 268*e4b17023SJohn Marino { return __builtin_fabsl(__x); } 269*e4b17023SJohn Marino#endif 270*e4b17023SJohn Marino 271*e4b17023SJohn Marino template<typename _Tp> 272*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 273*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 274*e4b17023SJohn Marino double>::__type 275*e4b17023SJohn Marino fabs(_Tp __x) 276*e4b17023SJohn Marino { return __builtin_fabs(__x); } 277*e4b17023SJohn Marino 278*e4b17023SJohn Marino using ::floor; 279*e4b17023SJohn Marino 280*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 281*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 282*e4b17023SJohn Marino floor(float __x) 283*e4b17023SJohn Marino { return __builtin_floorf(__x); } 284*e4b17023SJohn Marino 285*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 286*e4b17023SJohn Marino floor(long double __x) 287*e4b17023SJohn Marino { return __builtin_floorl(__x); } 288*e4b17023SJohn Marino#endif 289*e4b17023SJohn Marino 290*e4b17023SJohn Marino template<typename _Tp> 291*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 292*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 293*e4b17023SJohn Marino double>::__type 294*e4b17023SJohn Marino floor(_Tp __x) 295*e4b17023SJohn Marino { return __builtin_floor(__x); } 296*e4b17023SJohn Marino 297*e4b17023SJohn Marino using ::fmod; 298*e4b17023SJohn Marino 299*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 300*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 301*e4b17023SJohn Marino fmod(float __x, float __y) 302*e4b17023SJohn Marino { return __builtin_fmodf(__x, __y); } 303*e4b17023SJohn Marino 304*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 305*e4b17023SJohn Marino fmod(long double __x, long double __y) 306*e4b17023SJohn Marino { return __builtin_fmodl(__x, __y); } 307*e4b17023SJohn Marino#endif 308*e4b17023SJohn Marino 309*e4b17023SJohn Marino template<typename _Tp, typename _Up> 310*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 311*e4b17023SJohn Marino typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 312*e4b17023SJohn Marino fmod(_Tp __x, _Up __y) 313*e4b17023SJohn Marino { 314*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 315*e4b17023SJohn Marino return fmod(__type(__x), __type(__y)); 316*e4b17023SJohn Marino } 317*e4b17023SJohn Marino 318*e4b17023SJohn Marino using ::frexp; 319*e4b17023SJohn Marino 320*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 321*e4b17023SJohn Marino inline float 322*e4b17023SJohn Marino frexp(float __x, int* __exp) 323*e4b17023SJohn Marino { return __builtin_frexpf(__x, __exp); } 324*e4b17023SJohn Marino 325*e4b17023SJohn Marino inline long double 326*e4b17023SJohn Marino frexp(long double __x, int* __exp) 327*e4b17023SJohn Marino { return __builtin_frexpl(__x, __exp); } 328*e4b17023SJohn Marino#endif 329*e4b17023SJohn Marino 330*e4b17023SJohn Marino template<typename _Tp> 331*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 332*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 333*e4b17023SJohn Marino double>::__type 334*e4b17023SJohn Marino frexp(_Tp __x, int* __exp) 335*e4b17023SJohn Marino { return __builtin_frexp(__x, __exp); } 336*e4b17023SJohn Marino 337*e4b17023SJohn Marino using ::ldexp; 338*e4b17023SJohn Marino 339*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 340*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 341*e4b17023SJohn Marino ldexp(float __x, int __exp) 342*e4b17023SJohn Marino { return __builtin_ldexpf(__x, __exp); } 343*e4b17023SJohn Marino 344*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 345*e4b17023SJohn Marino ldexp(long double __x, int __exp) 346*e4b17023SJohn Marino { return __builtin_ldexpl(__x, __exp); } 347*e4b17023SJohn Marino#endif 348*e4b17023SJohn Marino 349*e4b17023SJohn Marino template<typename _Tp> 350*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 351*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 352*e4b17023SJohn Marino double>::__type 353*e4b17023SJohn Marino ldexp(_Tp __x, int __exp) 354*e4b17023SJohn Marino { return __builtin_ldexp(__x, __exp); } 355*e4b17023SJohn Marino 356*e4b17023SJohn Marino using ::log; 357*e4b17023SJohn Marino 358*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 359*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 360*e4b17023SJohn Marino log(float __x) 361*e4b17023SJohn Marino { return __builtin_logf(__x); } 362*e4b17023SJohn Marino 363*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 364*e4b17023SJohn Marino log(long double __x) 365*e4b17023SJohn Marino { return __builtin_logl(__x); } 366*e4b17023SJohn Marino#endif 367*e4b17023SJohn Marino 368*e4b17023SJohn Marino template<typename _Tp> 369*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 370*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 371*e4b17023SJohn Marino double>::__type 372*e4b17023SJohn Marino log(_Tp __x) 373*e4b17023SJohn Marino { return __builtin_log(__x); } 374*e4b17023SJohn Marino 375*e4b17023SJohn Marino using ::log10; 376*e4b17023SJohn Marino 377*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 378*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 379*e4b17023SJohn Marino log10(float __x) 380*e4b17023SJohn Marino { return __builtin_log10f(__x); } 381*e4b17023SJohn Marino 382*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 383*e4b17023SJohn Marino log10(long double __x) 384*e4b17023SJohn Marino { return __builtin_log10l(__x); } 385*e4b17023SJohn Marino#endif 386*e4b17023SJohn Marino 387*e4b17023SJohn Marino template<typename _Tp> 388*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 389*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 390*e4b17023SJohn Marino double>::__type 391*e4b17023SJohn Marino log10(_Tp __x) 392*e4b17023SJohn Marino { return __builtin_log10(__x); } 393*e4b17023SJohn Marino 394*e4b17023SJohn Marino using ::modf; 395*e4b17023SJohn Marino 396*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 397*e4b17023SJohn Marino inline float 398*e4b17023SJohn Marino modf(float __x, float* __iptr) 399*e4b17023SJohn Marino { return __builtin_modff(__x, __iptr); } 400*e4b17023SJohn Marino 401*e4b17023SJohn Marino inline long double 402*e4b17023SJohn Marino modf(long double __x, long double* __iptr) 403*e4b17023SJohn Marino { return __builtin_modfl(__x, __iptr); } 404*e4b17023SJohn Marino#endif 405*e4b17023SJohn Marino 406*e4b17023SJohn Marino using ::pow; 407*e4b17023SJohn Marino 408*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 409*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 410*e4b17023SJohn Marino pow(float __x, float __y) 411*e4b17023SJohn Marino { return __builtin_powf(__x, __y); } 412*e4b17023SJohn Marino 413*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 414*e4b17023SJohn Marino pow(long double __x, long double __y) 415*e4b17023SJohn Marino { return __builtin_powl(__x, __y); } 416*e4b17023SJohn Marino 417*e4b17023SJohn Marino#ifndef __GXX_EXPERIMENTAL_CXX0X__ 418*e4b17023SJohn Marino // _GLIBCXX_RESOLVE_LIB_DEFECTS 419*e4b17023SJohn Marino // DR 550. What should the return type of pow(float,int) be? 420*e4b17023SJohn Marino inline double 421*e4b17023SJohn Marino pow(double __x, int __i) 422*e4b17023SJohn Marino { return __builtin_powi(__x, __i); } 423*e4b17023SJohn Marino 424*e4b17023SJohn Marino inline float 425*e4b17023SJohn Marino pow(float __x, int __n) 426*e4b17023SJohn Marino { return __builtin_powif(__x, __n); } 427*e4b17023SJohn Marino 428*e4b17023SJohn Marino inline long double 429*e4b17023SJohn Marino pow(long double __x, int __n) 430*e4b17023SJohn Marino { return __builtin_powil(__x, __n); } 431*e4b17023SJohn Marino#endif 432*e4b17023SJohn Marino#endif 433*e4b17023SJohn Marino 434*e4b17023SJohn Marino template<typename _Tp, typename _Up> 435*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 436*e4b17023SJohn Marino typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 437*e4b17023SJohn Marino pow(_Tp __x, _Up __y) 438*e4b17023SJohn Marino { 439*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 440*e4b17023SJohn Marino return pow(__type(__x), __type(__y)); 441*e4b17023SJohn Marino } 442*e4b17023SJohn Marino 443*e4b17023SJohn Marino using ::sin; 444*e4b17023SJohn Marino 445*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 446*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 447*e4b17023SJohn Marino sin(float __x) 448*e4b17023SJohn Marino { return __builtin_sinf(__x); } 449*e4b17023SJohn Marino 450*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 451*e4b17023SJohn Marino sin(long double __x) 452*e4b17023SJohn Marino { return __builtin_sinl(__x); } 453*e4b17023SJohn Marino#endif 454*e4b17023SJohn Marino 455*e4b17023SJohn Marino template<typename _Tp> 456*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 457*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 458*e4b17023SJohn Marino double>::__type 459*e4b17023SJohn Marino sin(_Tp __x) 460*e4b17023SJohn Marino { return __builtin_sin(__x); } 461*e4b17023SJohn Marino 462*e4b17023SJohn Marino using ::sinh; 463*e4b17023SJohn Marino 464*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 465*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 466*e4b17023SJohn Marino sinh(float __x) 467*e4b17023SJohn Marino { return __builtin_sinhf(__x); } 468*e4b17023SJohn Marino 469*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 470*e4b17023SJohn Marino sinh(long double __x) 471*e4b17023SJohn Marino { return __builtin_sinhl(__x); } 472*e4b17023SJohn Marino#endif 473*e4b17023SJohn Marino 474*e4b17023SJohn Marino template<typename _Tp> 475*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 476*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 477*e4b17023SJohn Marino double>::__type 478*e4b17023SJohn Marino sinh(_Tp __x) 479*e4b17023SJohn Marino { return __builtin_sinh(__x); } 480*e4b17023SJohn Marino 481*e4b17023SJohn Marino using ::sqrt; 482*e4b17023SJohn Marino 483*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 484*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 485*e4b17023SJohn Marino sqrt(float __x) 486*e4b17023SJohn Marino { return __builtin_sqrtf(__x); } 487*e4b17023SJohn Marino 488*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 489*e4b17023SJohn Marino sqrt(long double __x) 490*e4b17023SJohn Marino { return __builtin_sqrtl(__x); } 491*e4b17023SJohn Marino#endif 492*e4b17023SJohn Marino 493*e4b17023SJohn Marino template<typename _Tp> 494*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 495*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 496*e4b17023SJohn Marino double>::__type 497*e4b17023SJohn Marino sqrt(_Tp __x) 498*e4b17023SJohn Marino { return __builtin_sqrt(__x); } 499*e4b17023SJohn Marino 500*e4b17023SJohn Marino using ::tan; 501*e4b17023SJohn Marino 502*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 503*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 504*e4b17023SJohn Marino tan(float __x) 505*e4b17023SJohn Marino { return __builtin_tanf(__x); } 506*e4b17023SJohn Marino 507*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 508*e4b17023SJohn Marino tan(long double __x) 509*e4b17023SJohn Marino { return __builtin_tanl(__x); } 510*e4b17023SJohn Marino#endif 511*e4b17023SJohn Marino 512*e4b17023SJohn Marino template<typename _Tp> 513*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 514*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 515*e4b17023SJohn Marino double>::__type 516*e4b17023SJohn Marino tan(_Tp __x) 517*e4b17023SJohn Marino { return __builtin_tan(__x); } 518*e4b17023SJohn Marino 519*e4b17023SJohn Marino using ::tanh; 520*e4b17023SJohn Marino 521*e4b17023SJohn Marino#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1 522*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR float 523*e4b17023SJohn Marino tanh(float __x) 524*e4b17023SJohn Marino { return __builtin_tanhf(__x); } 525*e4b17023SJohn Marino 526*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR long double 527*e4b17023SJohn Marino tanh(long double __x) 528*e4b17023SJohn Marino { return __builtin_tanhl(__x); } 529*e4b17023SJohn Marino#endif 530*e4b17023SJohn Marino 531*e4b17023SJohn Marino template<typename _Tp> 532*e4b17023SJohn Marino inline _GLIBCXX_CONSTEXPR 533*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 534*e4b17023SJohn Marino double>::__type 535*e4b17023SJohn Marino tanh(_Tp __x) 536*e4b17023SJohn Marino { return __builtin_tanh(__x); } 537*e4b17023SJohn Marino 538*e4b17023SJohn Marino_GLIBCXX_END_NAMESPACE_VERSION 539*e4b17023SJohn Marino} // namespace 540*e4b17023SJohn Marino 541*e4b17023SJohn Marino#if _GLIBCXX_USE_C99_MATH 542*e4b17023SJohn Marino#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC 543*e4b17023SJohn Marino 544*e4b17023SJohn Marino// These are possible macros imported from C99-land. 545*e4b17023SJohn Marino#undef fpclassify 546*e4b17023SJohn Marino#undef isfinite 547*e4b17023SJohn Marino#undef isinf 548*e4b17023SJohn Marino#undef isnan 549*e4b17023SJohn Marino#undef isnormal 550*e4b17023SJohn Marino#undef signbit 551*e4b17023SJohn Marino#undef isgreater 552*e4b17023SJohn Marino#undef isgreaterequal 553*e4b17023SJohn Marino#undef isless 554*e4b17023SJohn Marino#undef islessequal 555*e4b17023SJohn Marino#undef islessgreater 556*e4b17023SJohn Marino#undef isunordered 557*e4b17023SJohn Marino 558*e4b17023SJohn Marinonamespace std _GLIBCXX_VISIBILITY(default) 559*e4b17023SJohn Marino{ 560*e4b17023SJohn Marino_GLIBCXX_BEGIN_NAMESPACE_VERSION 561*e4b17023SJohn Marino 562*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__ 563*e4b17023SJohn Marino constexpr int 564*e4b17023SJohn Marino fpclassify(float __x) 565*e4b17023SJohn Marino { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, 566*e4b17023SJohn Marino FP_SUBNORMAL, FP_ZERO, __x); } 567*e4b17023SJohn Marino 568*e4b17023SJohn Marino constexpr int 569*e4b17023SJohn Marino fpclassify(double __x) 570*e4b17023SJohn Marino { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, 571*e4b17023SJohn Marino FP_SUBNORMAL, FP_ZERO, __x); } 572*e4b17023SJohn Marino 573*e4b17023SJohn Marino constexpr int 574*e4b17023SJohn Marino fpclassify(long double __x) 575*e4b17023SJohn Marino { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, 576*e4b17023SJohn Marino FP_SUBNORMAL, FP_ZERO, __x); } 577*e4b17023SJohn Marino 578*e4b17023SJohn Marino template<typename _Tp> 579*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 580*e4b17023SJohn Marino int>::__type 581*e4b17023SJohn Marino fpclassify(_Tp __x) 582*e4b17023SJohn Marino { return __x != 0 ? FP_NORMAL : FP_ZERO; } 583*e4b17023SJohn Marino 584*e4b17023SJohn Marino constexpr bool 585*e4b17023SJohn Marino isfinite(float __x) 586*e4b17023SJohn Marino { return __builtin_isfinite(__x); } 587*e4b17023SJohn Marino 588*e4b17023SJohn Marino constexpr bool 589*e4b17023SJohn Marino isfinite(double __x) 590*e4b17023SJohn Marino { return __builtin_isfinite(__x); } 591*e4b17023SJohn Marino 592*e4b17023SJohn Marino constexpr bool 593*e4b17023SJohn Marino isfinite(long double __x) 594*e4b17023SJohn Marino { return __builtin_isfinite(__x); } 595*e4b17023SJohn Marino 596*e4b17023SJohn Marino template<typename _Tp> 597*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 598*e4b17023SJohn Marino bool>::__type 599*e4b17023SJohn Marino isfinite(_Tp __x) 600*e4b17023SJohn Marino { return true; } 601*e4b17023SJohn Marino 602*e4b17023SJohn Marino constexpr bool 603*e4b17023SJohn Marino isinf(float __x) 604*e4b17023SJohn Marino { return __builtin_isinf(__x); } 605*e4b17023SJohn Marino 606*e4b17023SJohn Marino constexpr bool 607*e4b17023SJohn Marino isinf(double __x) 608*e4b17023SJohn Marino { return __builtin_isinf(__x); } 609*e4b17023SJohn Marino 610*e4b17023SJohn Marino constexpr bool 611*e4b17023SJohn Marino isinf(long double __x) 612*e4b17023SJohn Marino { return __builtin_isinf(__x); } 613*e4b17023SJohn Marino 614*e4b17023SJohn Marino template<typename _Tp> 615*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 616*e4b17023SJohn Marino bool>::__type 617*e4b17023SJohn Marino isinf(_Tp __x) 618*e4b17023SJohn Marino { return false; } 619*e4b17023SJohn Marino 620*e4b17023SJohn Marino constexpr bool 621*e4b17023SJohn Marino isnan(float __x) 622*e4b17023SJohn Marino { return __builtin_isnan(__x); } 623*e4b17023SJohn Marino 624*e4b17023SJohn Marino constexpr bool 625*e4b17023SJohn Marino isnan(double __x) 626*e4b17023SJohn Marino { return __builtin_isnan(__x); } 627*e4b17023SJohn Marino 628*e4b17023SJohn Marino constexpr bool 629*e4b17023SJohn Marino isnan(long double __x) 630*e4b17023SJohn Marino { return __builtin_isnan(__x); } 631*e4b17023SJohn Marino 632*e4b17023SJohn Marino template<typename _Tp> 633*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 634*e4b17023SJohn Marino bool>::__type 635*e4b17023SJohn Marino isnan(_Tp __x) 636*e4b17023SJohn Marino { return false; } 637*e4b17023SJohn Marino 638*e4b17023SJohn Marino constexpr bool 639*e4b17023SJohn Marino isnormal(float __x) 640*e4b17023SJohn Marino { return __builtin_isnormal(__x); } 641*e4b17023SJohn Marino 642*e4b17023SJohn Marino constexpr bool 643*e4b17023SJohn Marino isnormal(double __x) 644*e4b17023SJohn Marino { return __builtin_isnormal(__x); } 645*e4b17023SJohn Marino 646*e4b17023SJohn Marino constexpr bool 647*e4b17023SJohn Marino isnormal(long double __x) 648*e4b17023SJohn Marino { return __builtin_isnormal(__x); } 649*e4b17023SJohn Marino 650*e4b17023SJohn Marino template<typename _Tp> 651*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 652*e4b17023SJohn Marino bool>::__type 653*e4b17023SJohn Marino isnormal(_Tp __x) 654*e4b17023SJohn Marino { return __x != 0 ? true : false; } 655*e4b17023SJohn Marino 656*e4b17023SJohn Marino constexpr bool 657*e4b17023SJohn Marino signbit(float __x) 658*e4b17023SJohn Marino { return __builtin_signbit(__x); } 659*e4b17023SJohn Marino 660*e4b17023SJohn Marino constexpr bool 661*e4b17023SJohn Marino signbit(double __x) 662*e4b17023SJohn Marino { return __builtin_signbit(__x); } 663*e4b17023SJohn Marino 664*e4b17023SJohn Marino constexpr bool 665*e4b17023SJohn Marino signbit(long double __x) 666*e4b17023SJohn Marino { return __builtin_signbit(__x); } 667*e4b17023SJohn Marino 668*e4b17023SJohn Marino template<typename _Tp> 669*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 670*e4b17023SJohn Marino bool>::__type 671*e4b17023SJohn Marino signbit(_Tp __x) 672*e4b17023SJohn Marino { return __x < 0 ? true : false; } 673*e4b17023SJohn Marino 674*e4b17023SJohn Marino constexpr bool 675*e4b17023SJohn Marino isgreater(float __x, float __y) 676*e4b17023SJohn Marino { return __builtin_isgreater(__x, __y); } 677*e4b17023SJohn Marino 678*e4b17023SJohn Marino constexpr bool 679*e4b17023SJohn Marino isgreater(double __x, double __y) 680*e4b17023SJohn Marino { return __builtin_isgreater(__x, __y); } 681*e4b17023SJohn Marino 682*e4b17023SJohn Marino constexpr bool 683*e4b17023SJohn Marino isgreater(long double __x, long double __y) 684*e4b17023SJohn Marino { return __builtin_isgreater(__x, __y); } 685*e4b17023SJohn Marino 686*e4b17023SJohn Marino template<typename _Tp, typename _Up> 687*e4b17023SJohn Marino constexpr typename 688*e4b17023SJohn Marino __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 689*e4b17023SJohn Marino && __is_arithmetic<_Up>::__value), bool>::__type 690*e4b17023SJohn Marino isgreater(_Tp __x, _Up __y) 691*e4b17023SJohn Marino { 692*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 693*e4b17023SJohn Marino return __builtin_isgreater(__type(__x), __type(__y)); 694*e4b17023SJohn Marino } 695*e4b17023SJohn Marino 696*e4b17023SJohn Marino constexpr bool 697*e4b17023SJohn Marino isgreaterequal(float __x, float __y) 698*e4b17023SJohn Marino { return __builtin_isgreaterequal(__x, __y); } 699*e4b17023SJohn Marino 700*e4b17023SJohn Marino constexpr bool 701*e4b17023SJohn Marino isgreaterequal(double __x, double __y) 702*e4b17023SJohn Marino { return __builtin_isgreaterequal(__x, __y); } 703*e4b17023SJohn Marino 704*e4b17023SJohn Marino constexpr bool 705*e4b17023SJohn Marino isgreaterequal(long double __x, long double __y) 706*e4b17023SJohn Marino { return __builtin_isgreaterequal(__x, __y); } 707*e4b17023SJohn Marino 708*e4b17023SJohn Marino template<typename _Tp, typename _Up> 709*e4b17023SJohn Marino constexpr typename 710*e4b17023SJohn Marino __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 711*e4b17023SJohn Marino && __is_arithmetic<_Up>::__value), bool>::__type 712*e4b17023SJohn Marino isgreaterequal(_Tp __x, _Up __y) 713*e4b17023SJohn Marino { 714*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 715*e4b17023SJohn Marino return __builtin_isgreaterequal(__type(__x), __type(__y)); 716*e4b17023SJohn Marino } 717*e4b17023SJohn Marino 718*e4b17023SJohn Marino constexpr bool 719*e4b17023SJohn Marino isless(float __x, float __y) 720*e4b17023SJohn Marino { return __builtin_isless(__x, __y); } 721*e4b17023SJohn Marino 722*e4b17023SJohn Marino constexpr bool 723*e4b17023SJohn Marino isless(double __x, double __y) 724*e4b17023SJohn Marino { return __builtin_isless(__x, __y); } 725*e4b17023SJohn Marino 726*e4b17023SJohn Marino constexpr bool 727*e4b17023SJohn Marino isless(long double __x, long double __y) 728*e4b17023SJohn Marino { return __builtin_isless(__x, __y); } 729*e4b17023SJohn Marino 730*e4b17023SJohn Marino template<typename _Tp, typename _Up> 731*e4b17023SJohn Marino constexpr typename 732*e4b17023SJohn Marino __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 733*e4b17023SJohn Marino && __is_arithmetic<_Up>::__value), bool>::__type 734*e4b17023SJohn Marino isless(_Tp __x, _Up __y) 735*e4b17023SJohn Marino { 736*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 737*e4b17023SJohn Marino return __builtin_isless(__type(__x), __type(__y)); 738*e4b17023SJohn Marino } 739*e4b17023SJohn Marino 740*e4b17023SJohn Marino constexpr bool 741*e4b17023SJohn Marino islessequal(float __x, float __y) 742*e4b17023SJohn Marino { return __builtin_islessequal(__x, __y); } 743*e4b17023SJohn Marino 744*e4b17023SJohn Marino constexpr bool 745*e4b17023SJohn Marino islessequal(double __x, double __y) 746*e4b17023SJohn Marino { return __builtin_islessequal(__x, __y); } 747*e4b17023SJohn Marino 748*e4b17023SJohn Marino constexpr bool 749*e4b17023SJohn Marino islessequal(long double __x, long double __y) 750*e4b17023SJohn Marino { return __builtin_islessequal(__x, __y); } 751*e4b17023SJohn Marino 752*e4b17023SJohn Marino template<typename _Tp, typename _Up> 753*e4b17023SJohn Marino constexpr typename 754*e4b17023SJohn Marino __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 755*e4b17023SJohn Marino && __is_arithmetic<_Up>::__value), bool>::__type 756*e4b17023SJohn Marino islessequal(_Tp __x, _Up __y) 757*e4b17023SJohn Marino { 758*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 759*e4b17023SJohn Marino return __builtin_islessequal(__type(__x), __type(__y)); 760*e4b17023SJohn Marino } 761*e4b17023SJohn Marino 762*e4b17023SJohn Marino constexpr bool 763*e4b17023SJohn Marino islessgreater(float __x, float __y) 764*e4b17023SJohn Marino { return __builtin_islessgreater(__x, __y); } 765*e4b17023SJohn Marino 766*e4b17023SJohn Marino constexpr bool 767*e4b17023SJohn Marino islessgreater(double __x, double __y) 768*e4b17023SJohn Marino { return __builtin_islessgreater(__x, __y); } 769*e4b17023SJohn Marino 770*e4b17023SJohn Marino constexpr bool 771*e4b17023SJohn Marino islessgreater(long double __x, long double __y) 772*e4b17023SJohn Marino { return __builtin_islessgreater(__x, __y); } 773*e4b17023SJohn Marino 774*e4b17023SJohn Marino template<typename _Tp, typename _Up> 775*e4b17023SJohn Marino constexpr typename 776*e4b17023SJohn Marino __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 777*e4b17023SJohn Marino && __is_arithmetic<_Up>::__value), bool>::__type 778*e4b17023SJohn Marino islessgreater(_Tp __x, _Up __y) 779*e4b17023SJohn Marino { 780*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 781*e4b17023SJohn Marino return __builtin_islessgreater(__type(__x), __type(__y)); 782*e4b17023SJohn Marino } 783*e4b17023SJohn Marino 784*e4b17023SJohn Marino constexpr bool 785*e4b17023SJohn Marino isunordered(float __x, float __y) 786*e4b17023SJohn Marino { return __builtin_isunordered(__x, __y); } 787*e4b17023SJohn Marino 788*e4b17023SJohn Marino constexpr bool 789*e4b17023SJohn Marino isunordered(double __x, double __y) 790*e4b17023SJohn Marino { return __builtin_isunordered(__x, __y); } 791*e4b17023SJohn Marino 792*e4b17023SJohn Marino constexpr bool 793*e4b17023SJohn Marino isunordered(long double __x, long double __y) 794*e4b17023SJohn Marino { return __builtin_isunordered(__x, __y); } 795*e4b17023SJohn Marino 796*e4b17023SJohn Marino template<typename _Tp, typename _Up> 797*e4b17023SJohn Marino constexpr typename 798*e4b17023SJohn Marino __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value 799*e4b17023SJohn Marino && __is_arithmetic<_Up>::__value), bool>::__type 800*e4b17023SJohn Marino isunordered(_Tp __x, _Up __y) 801*e4b17023SJohn Marino { 802*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 803*e4b17023SJohn Marino return __builtin_isunordered(__type(__x), __type(__y)); 804*e4b17023SJohn Marino } 805*e4b17023SJohn Marino 806*e4b17023SJohn Marino#else 807*e4b17023SJohn Marino 808*e4b17023SJohn Marino template<typename _Tp> 809*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 810*e4b17023SJohn Marino int>::__type 811*e4b17023SJohn Marino fpclassify(_Tp __f) 812*e4b17023SJohn Marino { 813*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 814*e4b17023SJohn Marino return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, 815*e4b17023SJohn Marino FP_SUBNORMAL, FP_ZERO, __type(__f)); 816*e4b17023SJohn Marino } 817*e4b17023SJohn Marino 818*e4b17023SJohn Marino template<typename _Tp> 819*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 820*e4b17023SJohn Marino int>::__type 821*e4b17023SJohn Marino isfinite(_Tp __f) 822*e4b17023SJohn Marino { 823*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 824*e4b17023SJohn Marino return __builtin_isfinite(__type(__f)); 825*e4b17023SJohn Marino } 826*e4b17023SJohn Marino 827*e4b17023SJohn Marino template<typename _Tp> 828*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 829*e4b17023SJohn Marino int>::__type 830*e4b17023SJohn Marino isinf(_Tp __f) 831*e4b17023SJohn Marino { 832*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 833*e4b17023SJohn Marino return __builtin_isinf(__type(__f)); 834*e4b17023SJohn Marino } 835*e4b17023SJohn Marino 836*e4b17023SJohn Marino template<typename _Tp> 837*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 838*e4b17023SJohn Marino int>::__type 839*e4b17023SJohn Marino isnan(_Tp __f) 840*e4b17023SJohn Marino { 841*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 842*e4b17023SJohn Marino return __builtin_isnan(__type(__f)); 843*e4b17023SJohn Marino } 844*e4b17023SJohn Marino 845*e4b17023SJohn Marino template<typename _Tp> 846*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 847*e4b17023SJohn Marino int>::__type 848*e4b17023SJohn Marino isnormal(_Tp __f) 849*e4b17023SJohn Marino { 850*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 851*e4b17023SJohn Marino return __builtin_isnormal(__type(__f)); 852*e4b17023SJohn Marino } 853*e4b17023SJohn Marino 854*e4b17023SJohn Marino template<typename _Tp> 855*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 856*e4b17023SJohn Marino int>::__type 857*e4b17023SJohn Marino signbit(_Tp __f) 858*e4b17023SJohn Marino { 859*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 860*e4b17023SJohn Marino return __builtin_signbit(__type(__f)); 861*e4b17023SJohn Marino } 862*e4b17023SJohn Marino 863*e4b17023SJohn Marino template<typename _Tp> 864*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 865*e4b17023SJohn Marino int>::__type 866*e4b17023SJohn Marino isgreater(_Tp __f1, _Tp __f2) 867*e4b17023SJohn Marino { 868*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 869*e4b17023SJohn Marino return __builtin_isgreater(__type(__f1), __type(__f2)); 870*e4b17023SJohn Marino } 871*e4b17023SJohn Marino 872*e4b17023SJohn Marino template<typename _Tp> 873*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 874*e4b17023SJohn Marino int>::__type 875*e4b17023SJohn Marino isgreaterequal(_Tp __f1, _Tp __f2) 876*e4b17023SJohn Marino { 877*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 878*e4b17023SJohn Marino return __builtin_isgreaterequal(__type(__f1), __type(__f2)); 879*e4b17023SJohn Marino } 880*e4b17023SJohn Marino 881*e4b17023SJohn Marino template<typename _Tp> 882*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 883*e4b17023SJohn Marino int>::__type 884*e4b17023SJohn Marino isless(_Tp __f1, _Tp __f2) 885*e4b17023SJohn Marino { 886*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 887*e4b17023SJohn Marino return __builtin_isless(__type(__f1), __type(__f2)); 888*e4b17023SJohn Marino } 889*e4b17023SJohn Marino 890*e4b17023SJohn Marino template<typename _Tp> 891*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 892*e4b17023SJohn Marino int>::__type 893*e4b17023SJohn Marino islessequal(_Tp __f1, _Tp __f2) 894*e4b17023SJohn Marino { 895*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 896*e4b17023SJohn Marino return __builtin_islessequal(__type(__f1), __type(__f2)); 897*e4b17023SJohn Marino } 898*e4b17023SJohn Marino 899*e4b17023SJohn Marino template<typename _Tp> 900*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 901*e4b17023SJohn Marino int>::__type 902*e4b17023SJohn Marino islessgreater(_Tp __f1, _Tp __f2) 903*e4b17023SJohn Marino { 904*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 905*e4b17023SJohn Marino return __builtin_islessgreater(__type(__f1), __type(__f2)); 906*e4b17023SJohn Marino } 907*e4b17023SJohn Marino 908*e4b17023SJohn Marino template<typename _Tp> 909*e4b17023SJohn Marino inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, 910*e4b17023SJohn Marino int>::__type 911*e4b17023SJohn Marino isunordered(_Tp __f1, _Tp __f2) 912*e4b17023SJohn Marino { 913*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 914*e4b17023SJohn Marino return __builtin_isunordered(__type(__f1), __type(__f2)); 915*e4b17023SJohn Marino } 916*e4b17023SJohn Marino 917*e4b17023SJohn Marino#endif 918*e4b17023SJohn Marino 919*e4b17023SJohn Marino_GLIBCXX_END_NAMESPACE_VERSION 920*e4b17023SJohn Marino} // namespace 921*e4b17023SJohn Marino 922*e4b17023SJohn Marino#endif /* _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC */ 923*e4b17023SJohn Marino#endif 924*e4b17023SJohn Marino 925*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__ 926*e4b17023SJohn Marino 927*e4b17023SJohn Marino#ifdef _GLIBCXX_USE_C99_MATH_TR1 928*e4b17023SJohn Marino 929*e4b17023SJohn Marino#undef acosh 930*e4b17023SJohn Marino#undef acoshf 931*e4b17023SJohn Marino#undef acoshl 932*e4b17023SJohn Marino#undef asinh 933*e4b17023SJohn Marino#undef asinhf 934*e4b17023SJohn Marino#undef asinhl 935*e4b17023SJohn Marino#undef atanh 936*e4b17023SJohn Marino#undef atanhf 937*e4b17023SJohn Marino#undef atanhl 938*e4b17023SJohn Marino#undef cbrt 939*e4b17023SJohn Marino#undef cbrtf 940*e4b17023SJohn Marino#undef cbrtl 941*e4b17023SJohn Marino#undef copysign 942*e4b17023SJohn Marino#undef copysignf 943*e4b17023SJohn Marino#undef copysignl 944*e4b17023SJohn Marino#undef erf 945*e4b17023SJohn Marino#undef erff 946*e4b17023SJohn Marino#undef erfl 947*e4b17023SJohn Marino#undef erfc 948*e4b17023SJohn Marino#undef erfcf 949*e4b17023SJohn Marino#undef erfcl 950*e4b17023SJohn Marino#undef exp2 951*e4b17023SJohn Marino#undef exp2f 952*e4b17023SJohn Marino#undef exp2l 953*e4b17023SJohn Marino#undef expm1 954*e4b17023SJohn Marino#undef expm1f 955*e4b17023SJohn Marino#undef expm1l 956*e4b17023SJohn Marino#undef fdim 957*e4b17023SJohn Marino#undef fdimf 958*e4b17023SJohn Marino#undef fdiml 959*e4b17023SJohn Marino#undef fma 960*e4b17023SJohn Marino#undef fmaf 961*e4b17023SJohn Marino#undef fmal 962*e4b17023SJohn Marino#undef fmax 963*e4b17023SJohn Marino#undef fmaxf 964*e4b17023SJohn Marino#undef fmaxl 965*e4b17023SJohn Marino#undef fmin 966*e4b17023SJohn Marino#undef fminf 967*e4b17023SJohn Marino#undef fminl 968*e4b17023SJohn Marino#undef hypot 969*e4b17023SJohn Marino#undef hypotf 970*e4b17023SJohn Marino#undef hypotl 971*e4b17023SJohn Marino#undef ilogb 972*e4b17023SJohn Marino#undef ilogbf 973*e4b17023SJohn Marino#undef ilogbl 974*e4b17023SJohn Marino#undef lgamma 975*e4b17023SJohn Marino#undef lgammaf 976*e4b17023SJohn Marino#undef lgammal 977*e4b17023SJohn Marino#undef llrint 978*e4b17023SJohn Marino#undef llrintf 979*e4b17023SJohn Marino#undef llrintl 980*e4b17023SJohn Marino#undef llround 981*e4b17023SJohn Marino#undef llroundf 982*e4b17023SJohn Marino#undef llroundl 983*e4b17023SJohn Marino#undef log1p 984*e4b17023SJohn Marino#undef log1pf 985*e4b17023SJohn Marino#undef log1pl 986*e4b17023SJohn Marino#undef log2 987*e4b17023SJohn Marino#undef log2f 988*e4b17023SJohn Marino#undef log2l 989*e4b17023SJohn Marino#undef logb 990*e4b17023SJohn Marino#undef logbf 991*e4b17023SJohn Marino#undef logbl 992*e4b17023SJohn Marino#undef lrint 993*e4b17023SJohn Marino#undef lrintf 994*e4b17023SJohn Marino#undef lrintl 995*e4b17023SJohn Marino#undef lround 996*e4b17023SJohn Marino#undef lroundf 997*e4b17023SJohn Marino#undef lroundl 998*e4b17023SJohn Marino#undef nan 999*e4b17023SJohn Marino#undef nanf 1000*e4b17023SJohn Marino#undef nanl 1001*e4b17023SJohn Marino#undef nearbyint 1002*e4b17023SJohn Marino#undef nearbyintf 1003*e4b17023SJohn Marino#undef nearbyintl 1004*e4b17023SJohn Marino#undef nextafter 1005*e4b17023SJohn Marino#undef nextafterf 1006*e4b17023SJohn Marino#undef nextafterl 1007*e4b17023SJohn Marino#undef nexttoward 1008*e4b17023SJohn Marino#undef nexttowardf 1009*e4b17023SJohn Marino#undef nexttowardl 1010*e4b17023SJohn Marino#undef remainder 1011*e4b17023SJohn Marino#undef remainderf 1012*e4b17023SJohn Marino#undef remainderl 1013*e4b17023SJohn Marino#undef remquo 1014*e4b17023SJohn Marino#undef remquof 1015*e4b17023SJohn Marino#undef remquol 1016*e4b17023SJohn Marino#undef rint 1017*e4b17023SJohn Marino#undef rintf 1018*e4b17023SJohn Marino#undef rintl 1019*e4b17023SJohn Marino#undef round 1020*e4b17023SJohn Marino#undef roundf 1021*e4b17023SJohn Marino#undef roundl 1022*e4b17023SJohn Marino#undef scalbln 1023*e4b17023SJohn Marino#undef scalblnf 1024*e4b17023SJohn Marino#undef scalblnl 1025*e4b17023SJohn Marino#undef scalbn 1026*e4b17023SJohn Marino#undef scalbnf 1027*e4b17023SJohn Marino#undef scalbnl 1028*e4b17023SJohn Marino#undef tgamma 1029*e4b17023SJohn Marino#undef tgammaf 1030*e4b17023SJohn Marino#undef tgammal 1031*e4b17023SJohn Marino#undef trunc 1032*e4b17023SJohn Marino#undef truncf 1033*e4b17023SJohn Marino#undef truncl 1034*e4b17023SJohn Marino 1035*e4b17023SJohn Marinonamespace std _GLIBCXX_VISIBILITY(default) 1036*e4b17023SJohn Marino{ 1037*e4b17023SJohn Marino_GLIBCXX_BEGIN_NAMESPACE_VERSION 1038*e4b17023SJohn Marino 1039*e4b17023SJohn Marino // types 1040*e4b17023SJohn Marino using ::double_t; 1041*e4b17023SJohn Marino using ::float_t; 1042*e4b17023SJohn Marino 1043*e4b17023SJohn Marino // functions 1044*e4b17023SJohn Marino using ::acosh; 1045*e4b17023SJohn Marino using ::acoshf; 1046*e4b17023SJohn Marino using ::acoshl; 1047*e4b17023SJohn Marino 1048*e4b17023SJohn Marino using ::asinh; 1049*e4b17023SJohn Marino using ::asinhf; 1050*e4b17023SJohn Marino using ::asinhl; 1051*e4b17023SJohn Marino 1052*e4b17023SJohn Marino using ::atanh; 1053*e4b17023SJohn Marino using ::atanhf; 1054*e4b17023SJohn Marino using ::atanhl; 1055*e4b17023SJohn Marino 1056*e4b17023SJohn Marino using ::cbrt; 1057*e4b17023SJohn Marino using ::cbrtf; 1058*e4b17023SJohn Marino using ::cbrtl; 1059*e4b17023SJohn Marino 1060*e4b17023SJohn Marino using ::copysign; 1061*e4b17023SJohn Marino using ::copysignf; 1062*e4b17023SJohn Marino using ::copysignl; 1063*e4b17023SJohn Marino 1064*e4b17023SJohn Marino using ::erf; 1065*e4b17023SJohn Marino using ::erff; 1066*e4b17023SJohn Marino using ::erfl; 1067*e4b17023SJohn Marino 1068*e4b17023SJohn Marino using ::erfc; 1069*e4b17023SJohn Marino using ::erfcf; 1070*e4b17023SJohn Marino using ::erfcl; 1071*e4b17023SJohn Marino 1072*e4b17023SJohn Marino using ::exp2; 1073*e4b17023SJohn Marino using ::exp2f; 1074*e4b17023SJohn Marino using ::exp2l; 1075*e4b17023SJohn Marino 1076*e4b17023SJohn Marino using ::expm1; 1077*e4b17023SJohn Marino using ::expm1f; 1078*e4b17023SJohn Marino using ::expm1l; 1079*e4b17023SJohn Marino 1080*e4b17023SJohn Marino using ::fdim; 1081*e4b17023SJohn Marino using ::fdimf; 1082*e4b17023SJohn Marino using ::fdiml; 1083*e4b17023SJohn Marino 1084*e4b17023SJohn Marino using ::fma; 1085*e4b17023SJohn Marino using ::fmaf; 1086*e4b17023SJohn Marino using ::fmal; 1087*e4b17023SJohn Marino 1088*e4b17023SJohn Marino using ::fmax; 1089*e4b17023SJohn Marino using ::fmaxf; 1090*e4b17023SJohn Marino using ::fmaxl; 1091*e4b17023SJohn Marino 1092*e4b17023SJohn Marino using ::fmin; 1093*e4b17023SJohn Marino using ::fminf; 1094*e4b17023SJohn Marino using ::fminl; 1095*e4b17023SJohn Marino 1096*e4b17023SJohn Marino using ::hypot; 1097*e4b17023SJohn Marino using ::hypotf; 1098*e4b17023SJohn Marino using ::hypotl; 1099*e4b17023SJohn Marino 1100*e4b17023SJohn Marino using ::ilogb; 1101*e4b17023SJohn Marino using ::ilogbf; 1102*e4b17023SJohn Marino using ::ilogbl; 1103*e4b17023SJohn Marino 1104*e4b17023SJohn Marino using ::lgamma; 1105*e4b17023SJohn Marino using ::lgammaf; 1106*e4b17023SJohn Marino using ::lgammal; 1107*e4b17023SJohn Marino 1108*e4b17023SJohn Marino using ::llrint; 1109*e4b17023SJohn Marino using ::llrintf; 1110*e4b17023SJohn Marino using ::llrintl; 1111*e4b17023SJohn Marino 1112*e4b17023SJohn Marino using ::llround; 1113*e4b17023SJohn Marino using ::llroundf; 1114*e4b17023SJohn Marino using ::llroundl; 1115*e4b17023SJohn Marino 1116*e4b17023SJohn Marino using ::log1p; 1117*e4b17023SJohn Marino using ::log1pf; 1118*e4b17023SJohn Marino using ::log1pl; 1119*e4b17023SJohn Marino 1120*e4b17023SJohn Marino using ::log2; 1121*e4b17023SJohn Marino using ::log2f; 1122*e4b17023SJohn Marino using ::log2l; 1123*e4b17023SJohn Marino 1124*e4b17023SJohn Marino using ::logb; 1125*e4b17023SJohn Marino using ::logbf; 1126*e4b17023SJohn Marino using ::logbl; 1127*e4b17023SJohn Marino 1128*e4b17023SJohn Marino using ::lrint; 1129*e4b17023SJohn Marino using ::lrintf; 1130*e4b17023SJohn Marino using ::lrintl; 1131*e4b17023SJohn Marino 1132*e4b17023SJohn Marino using ::lround; 1133*e4b17023SJohn Marino using ::lroundf; 1134*e4b17023SJohn Marino using ::lroundl; 1135*e4b17023SJohn Marino 1136*e4b17023SJohn Marino using ::nan; 1137*e4b17023SJohn Marino using ::nanf; 1138*e4b17023SJohn Marino using ::nanl; 1139*e4b17023SJohn Marino 1140*e4b17023SJohn Marino using ::nearbyint; 1141*e4b17023SJohn Marino using ::nearbyintf; 1142*e4b17023SJohn Marino using ::nearbyintl; 1143*e4b17023SJohn Marino 1144*e4b17023SJohn Marino using ::nextafter; 1145*e4b17023SJohn Marino using ::nextafterf; 1146*e4b17023SJohn Marino using ::nextafterl; 1147*e4b17023SJohn Marino 1148*e4b17023SJohn Marino using ::nexttoward; 1149*e4b17023SJohn Marino using ::nexttowardf; 1150*e4b17023SJohn Marino using ::nexttowardl; 1151*e4b17023SJohn Marino 1152*e4b17023SJohn Marino using ::remainder; 1153*e4b17023SJohn Marino using ::remainderf; 1154*e4b17023SJohn Marino using ::remainderl; 1155*e4b17023SJohn Marino 1156*e4b17023SJohn Marino using ::remquo; 1157*e4b17023SJohn Marino using ::remquof; 1158*e4b17023SJohn Marino using ::remquol; 1159*e4b17023SJohn Marino 1160*e4b17023SJohn Marino using ::rint; 1161*e4b17023SJohn Marino using ::rintf; 1162*e4b17023SJohn Marino using ::rintl; 1163*e4b17023SJohn Marino 1164*e4b17023SJohn Marino using ::round; 1165*e4b17023SJohn Marino using ::roundf; 1166*e4b17023SJohn Marino using ::roundl; 1167*e4b17023SJohn Marino 1168*e4b17023SJohn Marino using ::scalbln; 1169*e4b17023SJohn Marino using ::scalblnf; 1170*e4b17023SJohn Marino using ::scalblnl; 1171*e4b17023SJohn Marino 1172*e4b17023SJohn Marino using ::scalbn; 1173*e4b17023SJohn Marino using ::scalbnf; 1174*e4b17023SJohn Marino using ::scalbnl; 1175*e4b17023SJohn Marino 1176*e4b17023SJohn Marino using ::tgamma; 1177*e4b17023SJohn Marino using ::tgammaf; 1178*e4b17023SJohn Marino using ::tgammal; 1179*e4b17023SJohn Marino 1180*e4b17023SJohn Marino using ::trunc; 1181*e4b17023SJohn Marino using ::truncf; 1182*e4b17023SJohn Marino using ::truncl; 1183*e4b17023SJohn Marino 1184*e4b17023SJohn Marino /// Additional overloads. 1185*e4b17023SJohn Marino constexpr float 1186*e4b17023SJohn Marino acosh(float __x) 1187*e4b17023SJohn Marino { return __builtin_acoshf(__x); } 1188*e4b17023SJohn Marino 1189*e4b17023SJohn Marino constexpr long double 1190*e4b17023SJohn Marino acosh(long double __x) 1191*e4b17023SJohn Marino { return __builtin_acoshl(__x); } 1192*e4b17023SJohn Marino 1193*e4b17023SJohn Marino template<typename _Tp> 1194*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1195*e4b17023SJohn Marino double>::__type 1196*e4b17023SJohn Marino acosh(_Tp __x) 1197*e4b17023SJohn Marino { return __builtin_acosh(__x); } 1198*e4b17023SJohn Marino 1199*e4b17023SJohn Marino constexpr float 1200*e4b17023SJohn Marino asinh(float __x) 1201*e4b17023SJohn Marino { return __builtin_asinhf(__x); } 1202*e4b17023SJohn Marino 1203*e4b17023SJohn Marino constexpr long double 1204*e4b17023SJohn Marino asinh(long double __x) 1205*e4b17023SJohn Marino { return __builtin_asinhl(__x); } 1206*e4b17023SJohn Marino 1207*e4b17023SJohn Marino template<typename _Tp> 1208*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1209*e4b17023SJohn Marino double>::__type 1210*e4b17023SJohn Marino asinh(_Tp __x) 1211*e4b17023SJohn Marino { return __builtin_asinh(__x); } 1212*e4b17023SJohn Marino 1213*e4b17023SJohn Marino constexpr float 1214*e4b17023SJohn Marino atanh(float __x) 1215*e4b17023SJohn Marino { return __builtin_atanhf(__x); } 1216*e4b17023SJohn Marino 1217*e4b17023SJohn Marino constexpr long double 1218*e4b17023SJohn Marino atanh(long double __x) 1219*e4b17023SJohn Marino { return __builtin_atanhl(__x); } 1220*e4b17023SJohn Marino 1221*e4b17023SJohn Marino template<typename _Tp> 1222*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1223*e4b17023SJohn Marino double>::__type 1224*e4b17023SJohn Marino atanh(_Tp __x) 1225*e4b17023SJohn Marino { return __builtin_atanh(__x); } 1226*e4b17023SJohn Marino 1227*e4b17023SJohn Marino constexpr float 1228*e4b17023SJohn Marino cbrt(float __x) 1229*e4b17023SJohn Marino { return __builtin_cbrtf(__x); } 1230*e4b17023SJohn Marino 1231*e4b17023SJohn Marino constexpr long double 1232*e4b17023SJohn Marino cbrt(long double __x) 1233*e4b17023SJohn Marino { return __builtin_cbrtl(__x); } 1234*e4b17023SJohn Marino 1235*e4b17023SJohn Marino template<typename _Tp> 1236*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1237*e4b17023SJohn Marino double>::__type 1238*e4b17023SJohn Marino cbrt(_Tp __x) 1239*e4b17023SJohn Marino { return __builtin_cbrt(__x); } 1240*e4b17023SJohn Marino 1241*e4b17023SJohn Marino constexpr float 1242*e4b17023SJohn Marino copysign(float __x, float __y) 1243*e4b17023SJohn Marino { return __builtin_copysignf(__x, __y); } 1244*e4b17023SJohn Marino 1245*e4b17023SJohn Marino constexpr long double 1246*e4b17023SJohn Marino copysign(long double __x, long double __y) 1247*e4b17023SJohn Marino { return __builtin_copysignl(__x, __y); } 1248*e4b17023SJohn Marino 1249*e4b17023SJohn Marino template<typename _Tp, typename _Up> 1250*e4b17023SJohn Marino constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 1251*e4b17023SJohn Marino copysign(_Tp __x, _Up __y) 1252*e4b17023SJohn Marino { 1253*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 1254*e4b17023SJohn Marino return copysign(__type(__x), __type(__y)); 1255*e4b17023SJohn Marino } 1256*e4b17023SJohn Marino 1257*e4b17023SJohn Marino constexpr float 1258*e4b17023SJohn Marino erf(float __x) 1259*e4b17023SJohn Marino { return __builtin_erff(__x); } 1260*e4b17023SJohn Marino 1261*e4b17023SJohn Marino constexpr long double 1262*e4b17023SJohn Marino erf(long double __x) 1263*e4b17023SJohn Marino { return __builtin_erfl(__x); } 1264*e4b17023SJohn Marino 1265*e4b17023SJohn Marino template<typename _Tp> 1266*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1267*e4b17023SJohn Marino double>::__type 1268*e4b17023SJohn Marino erf(_Tp __x) 1269*e4b17023SJohn Marino { return __builtin_erf(__x); } 1270*e4b17023SJohn Marino 1271*e4b17023SJohn Marino constexpr float 1272*e4b17023SJohn Marino erfc(float __x) 1273*e4b17023SJohn Marino { return __builtin_erfcf(__x); } 1274*e4b17023SJohn Marino 1275*e4b17023SJohn Marino constexpr long double 1276*e4b17023SJohn Marino erfc(long double __x) 1277*e4b17023SJohn Marino { return __builtin_erfcl(__x); } 1278*e4b17023SJohn Marino 1279*e4b17023SJohn Marino template<typename _Tp> 1280*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1281*e4b17023SJohn Marino double>::__type 1282*e4b17023SJohn Marino erfc(_Tp __x) 1283*e4b17023SJohn Marino { return __builtin_erfc(__x); } 1284*e4b17023SJohn Marino 1285*e4b17023SJohn Marino constexpr float 1286*e4b17023SJohn Marino exp2(float __x) 1287*e4b17023SJohn Marino { return __builtin_exp2f(__x); } 1288*e4b17023SJohn Marino 1289*e4b17023SJohn Marino constexpr long double 1290*e4b17023SJohn Marino exp2(long double __x) 1291*e4b17023SJohn Marino { return __builtin_exp2l(__x); } 1292*e4b17023SJohn Marino 1293*e4b17023SJohn Marino template<typename _Tp> 1294*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1295*e4b17023SJohn Marino double>::__type 1296*e4b17023SJohn Marino exp2(_Tp __x) 1297*e4b17023SJohn Marino { return __builtin_exp2(__x); } 1298*e4b17023SJohn Marino 1299*e4b17023SJohn Marino constexpr float 1300*e4b17023SJohn Marino expm1(float __x) 1301*e4b17023SJohn Marino { return __builtin_expm1f(__x); } 1302*e4b17023SJohn Marino 1303*e4b17023SJohn Marino constexpr long double 1304*e4b17023SJohn Marino expm1(long double __x) 1305*e4b17023SJohn Marino { return __builtin_expm1l(__x); } 1306*e4b17023SJohn Marino 1307*e4b17023SJohn Marino template<typename _Tp> 1308*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1309*e4b17023SJohn Marino double>::__type 1310*e4b17023SJohn Marino expm1(_Tp __x) 1311*e4b17023SJohn Marino { return __builtin_expm1(__x); } 1312*e4b17023SJohn Marino 1313*e4b17023SJohn Marino constexpr float 1314*e4b17023SJohn Marino fdim(float __x, float __y) 1315*e4b17023SJohn Marino { return __builtin_fdimf(__x, __y); } 1316*e4b17023SJohn Marino 1317*e4b17023SJohn Marino constexpr long double 1318*e4b17023SJohn Marino fdim(long double __x, long double __y) 1319*e4b17023SJohn Marino { return __builtin_fdiml(__x, __y); } 1320*e4b17023SJohn Marino 1321*e4b17023SJohn Marino template<typename _Tp, typename _Up> 1322*e4b17023SJohn Marino constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 1323*e4b17023SJohn Marino fdim(_Tp __x, _Up __y) 1324*e4b17023SJohn Marino { 1325*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 1326*e4b17023SJohn Marino return fdim(__type(__x), __type(__y)); 1327*e4b17023SJohn Marino } 1328*e4b17023SJohn Marino 1329*e4b17023SJohn Marino constexpr float 1330*e4b17023SJohn Marino fma(float __x, float __y, float __z) 1331*e4b17023SJohn Marino { return __builtin_fmaf(__x, __y, __z); } 1332*e4b17023SJohn Marino 1333*e4b17023SJohn Marino constexpr long double 1334*e4b17023SJohn Marino fma(long double __x, long double __y, long double __z) 1335*e4b17023SJohn Marino { return __builtin_fmal(__x, __y, __z); } 1336*e4b17023SJohn Marino 1337*e4b17023SJohn Marino template<typename _Tp, typename _Up, typename _Vp> 1338*e4b17023SJohn Marino constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type 1339*e4b17023SJohn Marino fma(_Tp __x, _Up __y, _Vp __z) 1340*e4b17023SJohn Marino { 1341*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type; 1342*e4b17023SJohn Marino return fma(__type(__x), __type(__y), __type(__z)); 1343*e4b17023SJohn Marino } 1344*e4b17023SJohn Marino 1345*e4b17023SJohn Marino constexpr float 1346*e4b17023SJohn Marino fmax(float __x, float __y) 1347*e4b17023SJohn Marino { return __builtin_fmaxf(__x, __y); } 1348*e4b17023SJohn Marino 1349*e4b17023SJohn Marino constexpr long double 1350*e4b17023SJohn Marino fmax(long double __x, long double __y) 1351*e4b17023SJohn Marino { return __builtin_fmaxl(__x, __y); } 1352*e4b17023SJohn Marino 1353*e4b17023SJohn Marino template<typename _Tp, typename _Up> 1354*e4b17023SJohn Marino constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 1355*e4b17023SJohn Marino fmax(_Tp __x, _Up __y) 1356*e4b17023SJohn Marino { 1357*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 1358*e4b17023SJohn Marino return fmax(__type(__x), __type(__y)); 1359*e4b17023SJohn Marino } 1360*e4b17023SJohn Marino 1361*e4b17023SJohn Marino constexpr float 1362*e4b17023SJohn Marino fmin(float __x, float __y) 1363*e4b17023SJohn Marino { return __builtin_fminf(__x, __y); } 1364*e4b17023SJohn Marino 1365*e4b17023SJohn Marino constexpr long double 1366*e4b17023SJohn Marino fmin(long double __x, long double __y) 1367*e4b17023SJohn Marino { return __builtin_fminl(__x, __y); } 1368*e4b17023SJohn Marino 1369*e4b17023SJohn Marino template<typename _Tp, typename _Up> 1370*e4b17023SJohn Marino constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 1371*e4b17023SJohn Marino fmin(_Tp __x, _Up __y) 1372*e4b17023SJohn Marino { 1373*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 1374*e4b17023SJohn Marino return fmin(__type(__x), __type(__y)); 1375*e4b17023SJohn Marino } 1376*e4b17023SJohn Marino 1377*e4b17023SJohn Marino constexpr float 1378*e4b17023SJohn Marino hypot(float __x, float __y) 1379*e4b17023SJohn Marino { return __builtin_hypotf(__x, __y); } 1380*e4b17023SJohn Marino 1381*e4b17023SJohn Marino constexpr long double 1382*e4b17023SJohn Marino hypot(long double __x, long double __y) 1383*e4b17023SJohn Marino { return __builtin_hypotl(__x, __y); } 1384*e4b17023SJohn Marino 1385*e4b17023SJohn Marino template<typename _Tp, typename _Up> 1386*e4b17023SJohn Marino constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 1387*e4b17023SJohn Marino hypot(_Tp __x, _Up __y) 1388*e4b17023SJohn Marino { 1389*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 1390*e4b17023SJohn Marino return hypot(__type(__x), __type(__y)); 1391*e4b17023SJohn Marino } 1392*e4b17023SJohn Marino 1393*e4b17023SJohn Marino constexpr int 1394*e4b17023SJohn Marino ilogb(float __x) 1395*e4b17023SJohn Marino { return __builtin_ilogbf(__x); } 1396*e4b17023SJohn Marino 1397*e4b17023SJohn Marino constexpr int 1398*e4b17023SJohn Marino ilogb(long double __x) 1399*e4b17023SJohn Marino { return __builtin_ilogbl(__x); } 1400*e4b17023SJohn Marino 1401*e4b17023SJohn Marino template<typename _Tp> 1402*e4b17023SJohn Marino constexpr 1403*e4b17023SJohn Marino typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1404*e4b17023SJohn Marino int>::__type 1405*e4b17023SJohn Marino ilogb(_Tp __x) 1406*e4b17023SJohn Marino { return __builtin_ilogb(__x); } 1407*e4b17023SJohn Marino 1408*e4b17023SJohn Marino constexpr float 1409*e4b17023SJohn Marino lgamma(float __x) 1410*e4b17023SJohn Marino { return __builtin_lgammaf(__x); } 1411*e4b17023SJohn Marino 1412*e4b17023SJohn Marino constexpr long double 1413*e4b17023SJohn Marino lgamma(long double __x) 1414*e4b17023SJohn Marino { return __builtin_lgammal(__x); } 1415*e4b17023SJohn Marino 1416*e4b17023SJohn Marino template<typename _Tp> 1417*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1418*e4b17023SJohn Marino double>::__type 1419*e4b17023SJohn Marino lgamma(_Tp __x) 1420*e4b17023SJohn Marino { return __builtin_lgamma(__x); } 1421*e4b17023SJohn Marino 1422*e4b17023SJohn Marino constexpr long long 1423*e4b17023SJohn Marino llrint(float __x) 1424*e4b17023SJohn Marino { return __builtin_llrintf(__x); } 1425*e4b17023SJohn Marino 1426*e4b17023SJohn Marino constexpr long long 1427*e4b17023SJohn Marino llrint(long double __x) 1428*e4b17023SJohn Marino { return __builtin_llrintl(__x); } 1429*e4b17023SJohn Marino 1430*e4b17023SJohn Marino template<typename _Tp> 1431*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1432*e4b17023SJohn Marino long long>::__type 1433*e4b17023SJohn Marino llrint(_Tp __x) 1434*e4b17023SJohn Marino { return __builtin_llrint(__x); } 1435*e4b17023SJohn Marino 1436*e4b17023SJohn Marino constexpr long long 1437*e4b17023SJohn Marino llround(float __x) 1438*e4b17023SJohn Marino { return __builtin_llroundf(__x); } 1439*e4b17023SJohn Marino 1440*e4b17023SJohn Marino constexpr long long 1441*e4b17023SJohn Marino llround(long double __x) 1442*e4b17023SJohn Marino { return __builtin_llroundl(__x); } 1443*e4b17023SJohn Marino 1444*e4b17023SJohn Marino template<typename _Tp> 1445*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1446*e4b17023SJohn Marino long long>::__type 1447*e4b17023SJohn Marino llround(_Tp __x) 1448*e4b17023SJohn Marino { return __builtin_llround(__x); } 1449*e4b17023SJohn Marino 1450*e4b17023SJohn Marino constexpr float 1451*e4b17023SJohn Marino log1p(float __x) 1452*e4b17023SJohn Marino { return __builtin_log1pf(__x); } 1453*e4b17023SJohn Marino 1454*e4b17023SJohn Marino constexpr long double 1455*e4b17023SJohn Marino log1p(long double __x) 1456*e4b17023SJohn Marino { return __builtin_log1pl(__x); } 1457*e4b17023SJohn Marino 1458*e4b17023SJohn Marino template<typename _Tp> 1459*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1460*e4b17023SJohn Marino double>::__type 1461*e4b17023SJohn Marino log1p(_Tp __x) 1462*e4b17023SJohn Marino { return __builtin_log1p(__x); } 1463*e4b17023SJohn Marino 1464*e4b17023SJohn Marino // DR 568. 1465*e4b17023SJohn Marino constexpr float 1466*e4b17023SJohn Marino log2(float __x) 1467*e4b17023SJohn Marino { return __builtin_log2f(__x); } 1468*e4b17023SJohn Marino 1469*e4b17023SJohn Marino constexpr long double 1470*e4b17023SJohn Marino log2(long double __x) 1471*e4b17023SJohn Marino { return __builtin_log2l(__x); } 1472*e4b17023SJohn Marino 1473*e4b17023SJohn Marino template<typename _Tp> 1474*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1475*e4b17023SJohn Marino double>::__type 1476*e4b17023SJohn Marino log2(_Tp __x) 1477*e4b17023SJohn Marino { return __builtin_log2(__x); } 1478*e4b17023SJohn Marino 1479*e4b17023SJohn Marino constexpr float 1480*e4b17023SJohn Marino logb(float __x) 1481*e4b17023SJohn Marino { return __builtin_logbf(__x); } 1482*e4b17023SJohn Marino 1483*e4b17023SJohn Marino constexpr long double 1484*e4b17023SJohn Marino logb(long double __x) 1485*e4b17023SJohn Marino { return __builtin_logbl(__x); } 1486*e4b17023SJohn Marino 1487*e4b17023SJohn Marino template<typename _Tp> 1488*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1489*e4b17023SJohn Marino double>::__type 1490*e4b17023SJohn Marino logb(_Tp __x) 1491*e4b17023SJohn Marino { return __builtin_logb(__x); } 1492*e4b17023SJohn Marino 1493*e4b17023SJohn Marino constexpr long 1494*e4b17023SJohn Marino lrint(float __x) 1495*e4b17023SJohn Marino { return __builtin_lrintf(__x); } 1496*e4b17023SJohn Marino 1497*e4b17023SJohn Marino constexpr long 1498*e4b17023SJohn Marino lrint(long double __x) 1499*e4b17023SJohn Marino { return __builtin_lrintl(__x); } 1500*e4b17023SJohn Marino 1501*e4b17023SJohn Marino template<typename _Tp> 1502*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1503*e4b17023SJohn Marino long>::__type 1504*e4b17023SJohn Marino lrint(_Tp __x) 1505*e4b17023SJohn Marino { return __builtin_lrint(__x); } 1506*e4b17023SJohn Marino 1507*e4b17023SJohn Marino constexpr long 1508*e4b17023SJohn Marino lround(float __x) 1509*e4b17023SJohn Marino { return __builtin_lroundf(__x); } 1510*e4b17023SJohn Marino 1511*e4b17023SJohn Marino constexpr long 1512*e4b17023SJohn Marino lround(long double __x) 1513*e4b17023SJohn Marino { return __builtin_lroundl(__x); } 1514*e4b17023SJohn Marino 1515*e4b17023SJohn Marino template<typename _Tp> 1516*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1517*e4b17023SJohn Marino long>::__type 1518*e4b17023SJohn Marino lround(_Tp __x) 1519*e4b17023SJohn Marino { return __builtin_lround(__x); } 1520*e4b17023SJohn Marino 1521*e4b17023SJohn Marino constexpr float 1522*e4b17023SJohn Marino nearbyint(float __x) 1523*e4b17023SJohn Marino { return __builtin_nearbyintf(__x); } 1524*e4b17023SJohn Marino 1525*e4b17023SJohn Marino constexpr long double 1526*e4b17023SJohn Marino nearbyint(long double __x) 1527*e4b17023SJohn Marino { return __builtin_nearbyintl(__x); } 1528*e4b17023SJohn Marino 1529*e4b17023SJohn Marino template<typename _Tp> 1530*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1531*e4b17023SJohn Marino double>::__type 1532*e4b17023SJohn Marino nearbyint(_Tp __x) 1533*e4b17023SJohn Marino { return __builtin_nearbyint(__x); } 1534*e4b17023SJohn Marino 1535*e4b17023SJohn Marino constexpr float 1536*e4b17023SJohn Marino nextafter(float __x, float __y) 1537*e4b17023SJohn Marino { return __builtin_nextafterf(__x, __y); } 1538*e4b17023SJohn Marino 1539*e4b17023SJohn Marino constexpr long double 1540*e4b17023SJohn Marino nextafter(long double __x, long double __y) 1541*e4b17023SJohn Marino { return __builtin_nextafterl(__x, __y); } 1542*e4b17023SJohn Marino 1543*e4b17023SJohn Marino template<typename _Tp, typename _Up> 1544*e4b17023SJohn Marino constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 1545*e4b17023SJohn Marino nextafter(_Tp __x, _Up __y) 1546*e4b17023SJohn Marino { 1547*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 1548*e4b17023SJohn Marino return nextafter(__type(__x), __type(__y)); 1549*e4b17023SJohn Marino } 1550*e4b17023SJohn Marino 1551*e4b17023SJohn Marino constexpr float 1552*e4b17023SJohn Marino nexttoward(float __x, long double __y) 1553*e4b17023SJohn Marino { return __builtin_nexttowardf(__x, __y); } 1554*e4b17023SJohn Marino 1555*e4b17023SJohn Marino constexpr long double 1556*e4b17023SJohn Marino nexttoward(long double __x, long double __y) 1557*e4b17023SJohn Marino { return __builtin_nexttowardl(__x, __y); } 1558*e4b17023SJohn Marino 1559*e4b17023SJohn Marino template<typename _Tp> 1560*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1561*e4b17023SJohn Marino double>::__type 1562*e4b17023SJohn Marino nexttoward(_Tp __x, long double __y) 1563*e4b17023SJohn Marino { return __builtin_nexttoward(__x, __y); } 1564*e4b17023SJohn Marino 1565*e4b17023SJohn Marino constexpr float 1566*e4b17023SJohn Marino remainder(float __x, float __y) 1567*e4b17023SJohn Marino { return __builtin_remainderf(__x, __y); } 1568*e4b17023SJohn Marino 1569*e4b17023SJohn Marino constexpr long double 1570*e4b17023SJohn Marino remainder(long double __x, long double __y) 1571*e4b17023SJohn Marino { return __builtin_remainderl(__x, __y); } 1572*e4b17023SJohn Marino 1573*e4b17023SJohn Marino template<typename _Tp, typename _Up> 1574*e4b17023SJohn Marino constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 1575*e4b17023SJohn Marino remainder(_Tp __x, _Up __y) 1576*e4b17023SJohn Marino { 1577*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 1578*e4b17023SJohn Marino return remainder(__type(__x), __type(__y)); 1579*e4b17023SJohn Marino } 1580*e4b17023SJohn Marino 1581*e4b17023SJohn Marino inline float 1582*e4b17023SJohn Marino remquo(float __x, float __y, int* __pquo) 1583*e4b17023SJohn Marino { return __builtin_remquof(__x, __y, __pquo); } 1584*e4b17023SJohn Marino 1585*e4b17023SJohn Marino inline long double 1586*e4b17023SJohn Marino remquo(long double __x, long double __y, int* __pquo) 1587*e4b17023SJohn Marino { return __builtin_remquol(__x, __y, __pquo); } 1588*e4b17023SJohn Marino 1589*e4b17023SJohn Marino template<typename _Tp, typename _Up> 1590*e4b17023SJohn Marino inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 1591*e4b17023SJohn Marino remquo(_Tp __x, _Up __y, int* __pquo) 1592*e4b17023SJohn Marino { 1593*e4b17023SJohn Marino typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 1594*e4b17023SJohn Marino return remquo(__type(__x), __type(__y), __pquo); 1595*e4b17023SJohn Marino } 1596*e4b17023SJohn Marino 1597*e4b17023SJohn Marino constexpr float 1598*e4b17023SJohn Marino rint(float __x) 1599*e4b17023SJohn Marino { return __builtin_rintf(__x); } 1600*e4b17023SJohn Marino 1601*e4b17023SJohn Marino constexpr long double 1602*e4b17023SJohn Marino rint(long double __x) 1603*e4b17023SJohn Marino { return __builtin_rintl(__x); } 1604*e4b17023SJohn Marino 1605*e4b17023SJohn Marino template<typename _Tp> 1606*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1607*e4b17023SJohn Marino double>::__type 1608*e4b17023SJohn Marino rint(_Tp __x) 1609*e4b17023SJohn Marino { return __builtin_rint(__x); } 1610*e4b17023SJohn Marino 1611*e4b17023SJohn Marino constexpr float 1612*e4b17023SJohn Marino round(float __x) 1613*e4b17023SJohn Marino { return __builtin_roundf(__x); } 1614*e4b17023SJohn Marino 1615*e4b17023SJohn Marino constexpr long double 1616*e4b17023SJohn Marino round(long double __x) 1617*e4b17023SJohn Marino { return __builtin_roundl(__x); } 1618*e4b17023SJohn Marino 1619*e4b17023SJohn Marino template<typename _Tp> 1620*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1621*e4b17023SJohn Marino double>::__type 1622*e4b17023SJohn Marino round(_Tp __x) 1623*e4b17023SJohn Marino { return __builtin_round(__x); } 1624*e4b17023SJohn Marino 1625*e4b17023SJohn Marino constexpr float 1626*e4b17023SJohn Marino scalbln(float __x, long __ex) 1627*e4b17023SJohn Marino { return __builtin_scalblnf(__x, __ex); } 1628*e4b17023SJohn Marino 1629*e4b17023SJohn Marino constexpr long double 1630*e4b17023SJohn Marino scalbln(long double __x, long __ex) 1631*e4b17023SJohn Marino { return __builtin_scalblnl(__x, __ex); } 1632*e4b17023SJohn Marino 1633*e4b17023SJohn Marino template<typename _Tp> 1634*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1635*e4b17023SJohn Marino double>::__type 1636*e4b17023SJohn Marino scalbln(_Tp __x, long __ex) 1637*e4b17023SJohn Marino { return __builtin_scalbln(__x, __ex); } 1638*e4b17023SJohn Marino 1639*e4b17023SJohn Marino constexpr float 1640*e4b17023SJohn Marino scalbn(float __x, int __ex) 1641*e4b17023SJohn Marino { return __builtin_scalbnf(__x, __ex); } 1642*e4b17023SJohn Marino 1643*e4b17023SJohn Marino constexpr long double 1644*e4b17023SJohn Marino scalbn(long double __x, int __ex) 1645*e4b17023SJohn Marino { return __builtin_scalbnl(__x, __ex); } 1646*e4b17023SJohn Marino 1647*e4b17023SJohn Marino template<typename _Tp> 1648*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1649*e4b17023SJohn Marino double>::__type 1650*e4b17023SJohn Marino scalbn(_Tp __x, int __ex) 1651*e4b17023SJohn Marino { return __builtin_scalbn(__x, __ex); } 1652*e4b17023SJohn Marino 1653*e4b17023SJohn Marino constexpr float 1654*e4b17023SJohn Marino tgamma(float __x) 1655*e4b17023SJohn Marino { return __builtin_tgammaf(__x); } 1656*e4b17023SJohn Marino 1657*e4b17023SJohn Marino constexpr long double 1658*e4b17023SJohn Marino tgamma(long double __x) 1659*e4b17023SJohn Marino { return __builtin_tgammal(__x); } 1660*e4b17023SJohn Marino 1661*e4b17023SJohn Marino template<typename _Tp> 1662*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1663*e4b17023SJohn Marino double>::__type 1664*e4b17023SJohn Marino tgamma(_Tp __x) 1665*e4b17023SJohn Marino { return __builtin_tgamma(__x); } 1666*e4b17023SJohn Marino 1667*e4b17023SJohn Marino constexpr float 1668*e4b17023SJohn Marino trunc(float __x) 1669*e4b17023SJohn Marino { return __builtin_truncf(__x); } 1670*e4b17023SJohn Marino 1671*e4b17023SJohn Marino constexpr long double 1672*e4b17023SJohn Marino trunc(long double __x) 1673*e4b17023SJohn Marino { return __builtin_truncl(__x); } 1674*e4b17023SJohn Marino 1675*e4b17023SJohn Marino template<typename _Tp> 1676*e4b17023SJohn Marino constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 1677*e4b17023SJohn Marino double>::__type 1678*e4b17023SJohn Marino trunc(_Tp __x) 1679*e4b17023SJohn Marino { return __builtin_trunc(__x); } 1680*e4b17023SJohn Marino 1681*e4b17023SJohn Marino_GLIBCXX_END_NAMESPACE_VERSION 1682*e4b17023SJohn Marino} // namespace 1683*e4b17023SJohn Marino 1684*e4b17023SJohn Marino#endif // _GLIBCXX_USE_C99_MATH_TR1 1685*e4b17023SJohn Marino 1686*e4b17023SJohn Marino#endif // __GXX_EXPERIMENTAL_CXX0X__ 1687*e4b17023SJohn Marino 1688*e4b17023SJohn Marino#endif 1689