1*f8a1b7d9SAlexander Kabaev// TR1 cmath -*- C++ -*- 2*f8a1b7d9SAlexander Kabaev 3*f8a1b7d9SAlexander Kabaev// Copyright (C) 2006 Free Software Foundation, Inc. 4*f8a1b7d9SAlexander Kabaev// 5*f8a1b7d9SAlexander Kabaev// This file is part of the GNU ISO C++ Library. This library is free 6*f8a1b7d9SAlexander Kabaev// software; you can redistribute it and/or modify it under the 7*f8a1b7d9SAlexander Kabaev// terms of the GNU General Public License as published by the 8*f8a1b7d9SAlexander Kabaev// Free Software Foundation; either version 2, or (at your option) 9*f8a1b7d9SAlexander Kabaev// any later version. 10*f8a1b7d9SAlexander Kabaev 11*f8a1b7d9SAlexander Kabaev// This library is distributed in the hope that it will be useful, 12*f8a1b7d9SAlexander Kabaev// but WITHOUT ANY WARRANTY; without even the implied warranty of 13*f8a1b7d9SAlexander Kabaev// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*f8a1b7d9SAlexander Kabaev// GNU General Public License for more details. 15*f8a1b7d9SAlexander Kabaev 16*f8a1b7d9SAlexander Kabaev// You should have received a copy of the GNU General Public License along 17*f8a1b7d9SAlexander Kabaev// with this library; see the file COPYING. If not, write to the Free 18*f8a1b7d9SAlexander Kabaev// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19*f8a1b7d9SAlexander Kabaev// USA. 20*f8a1b7d9SAlexander Kabaev 21*f8a1b7d9SAlexander Kabaev// As a special exception, you may use this file as part of a free software 22*f8a1b7d9SAlexander Kabaev// library without restriction. Specifically, if other files instantiate 23*f8a1b7d9SAlexander Kabaev// templates or use macros or inline functions from this file, or you compile 24*f8a1b7d9SAlexander Kabaev// this file and link it with other files to produce an executable, this 25*f8a1b7d9SAlexander Kabaev// file does not by itself cause the resulting executable to be covered by 26*f8a1b7d9SAlexander Kabaev// the GNU General Public License. This exception does not however 27*f8a1b7d9SAlexander Kabaev// invalidate any other reasons why the executable file might be covered by 28*f8a1b7d9SAlexander Kabaev// the GNU General Public License. 29*f8a1b7d9SAlexander Kabaev 30*f8a1b7d9SAlexander Kabaev/** @file tr1/cmath 31*f8a1b7d9SAlexander Kabaev * This is a TR1 C++ Library header. 32*f8a1b7d9SAlexander Kabaev */ 33*f8a1b7d9SAlexander Kabaev 34*f8a1b7d9SAlexander Kabaev#ifndef _TR1_CMATH 35*f8a1b7d9SAlexander Kabaev#define _TR1_CMATH 1 36*f8a1b7d9SAlexander Kabaev 37*f8a1b7d9SAlexander Kabaev#include <bits/c++config.h> 38*f8a1b7d9SAlexander Kabaev#include <cmath> 39*f8a1b7d9SAlexander Kabaev#include <tr1/common.h> 40*f8a1b7d9SAlexander Kabaev 41*f8a1b7d9SAlexander Kabaev#if _GLIBCXX_USE_C99_MATH_TR1 42*f8a1b7d9SAlexander Kabaev 43*f8a1b7d9SAlexander Kabaev#undef acosh 44*f8a1b7d9SAlexander Kabaev#undef acoshf 45*f8a1b7d9SAlexander Kabaev#undef acoshl 46*f8a1b7d9SAlexander Kabaev#undef asinh 47*f8a1b7d9SAlexander Kabaev#undef asinhf 48*f8a1b7d9SAlexander Kabaev#undef asinhl 49*f8a1b7d9SAlexander Kabaev#undef atanh 50*f8a1b7d9SAlexander Kabaev#undef atanhf 51*f8a1b7d9SAlexander Kabaev#undef atanhl 52*f8a1b7d9SAlexander Kabaev#undef cbrt 53*f8a1b7d9SAlexander Kabaev#undef cbrtf 54*f8a1b7d9SAlexander Kabaev#undef cbrtl 55*f8a1b7d9SAlexander Kabaev#undef copysign 56*f8a1b7d9SAlexander Kabaev#undef copysignf 57*f8a1b7d9SAlexander Kabaev#undef copysignl 58*f8a1b7d9SAlexander Kabaev#undef erf 59*f8a1b7d9SAlexander Kabaev#undef erff 60*f8a1b7d9SAlexander Kabaev#undef erfl 61*f8a1b7d9SAlexander Kabaev#undef erfc 62*f8a1b7d9SAlexander Kabaev#undef erfcf 63*f8a1b7d9SAlexander Kabaev#undef erfcl 64*f8a1b7d9SAlexander Kabaev#undef exp2 65*f8a1b7d9SAlexander Kabaev#undef exp2f 66*f8a1b7d9SAlexander Kabaev#undef exp2l 67*f8a1b7d9SAlexander Kabaev#undef expm1 68*f8a1b7d9SAlexander Kabaev#undef expm1f 69*f8a1b7d9SAlexander Kabaev#undef expm1l 70*f8a1b7d9SAlexander Kabaev#undef fdim 71*f8a1b7d9SAlexander Kabaev#undef fdimf 72*f8a1b7d9SAlexander Kabaev#undef fdiml 73*f8a1b7d9SAlexander Kabaev#undef fma 74*f8a1b7d9SAlexander Kabaev#undef fmaf 75*f8a1b7d9SAlexander Kabaev#undef fmal 76*f8a1b7d9SAlexander Kabaev#undef fmax 77*f8a1b7d9SAlexander Kabaev#undef fmaxf 78*f8a1b7d9SAlexander Kabaev#undef fmaxl 79*f8a1b7d9SAlexander Kabaev#undef fmin 80*f8a1b7d9SAlexander Kabaev#undef fminf 81*f8a1b7d9SAlexander Kabaev#undef fminl 82*f8a1b7d9SAlexander Kabaev#undef hypot 83*f8a1b7d9SAlexander Kabaev#undef hypotf 84*f8a1b7d9SAlexander Kabaev#undef hypotl 85*f8a1b7d9SAlexander Kabaev#undef ilogb 86*f8a1b7d9SAlexander Kabaev#undef ilogbf 87*f8a1b7d9SAlexander Kabaev#undef ilogbl 88*f8a1b7d9SAlexander Kabaev#undef lgamma 89*f8a1b7d9SAlexander Kabaev#undef lgammaf 90*f8a1b7d9SAlexander Kabaev#undef lgammal 91*f8a1b7d9SAlexander Kabaev#undef llrint 92*f8a1b7d9SAlexander Kabaev#undef llrintf 93*f8a1b7d9SAlexander Kabaev#undef llrintl 94*f8a1b7d9SAlexander Kabaev#undef llround 95*f8a1b7d9SAlexander Kabaev#undef llroundf 96*f8a1b7d9SAlexander Kabaev#undef llroundl 97*f8a1b7d9SAlexander Kabaev#undef log1p 98*f8a1b7d9SAlexander Kabaev#undef log1pf 99*f8a1b7d9SAlexander Kabaev#undef log1pl 100*f8a1b7d9SAlexander Kabaev#undef log2 101*f8a1b7d9SAlexander Kabaev#undef log2f 102*f8a1b7d9SAlexander Kabaev#undef log2l 103*f8a1b7d9SAlexander Kabaev#undef logb 104*f8a1b7d9SAlexander Kabaev#undef logbf 105*f8a1b7d9SAlexander Kabaev#undef logbl 106*f8a1b7d9SAlexander Kabaev#undef lrint 107*f8a1b7d9SAlexander Kabaev#undef lrintf 108*f8a1b7d9SAlexander Kabaev#undef lrintl 109*f8a1b7d9SAlexander Kabaev#undef lround 110*f8a1b7d9SAlexander Kabaev#undef lroundf 111*f8a1b7d9SAlexander Kabaev#undef lroundl 112*f8a1b7d9SAlexander Kabaev#undef nan 113*f8a1b7d9SAlexander Kabaev#undef nanf 114*f8a1b7d9SAlexander Kabaev#undef nanl 115*f8a1b7d9SAlexander Kabaev#undef nearbyint 116*f8a1b7d9SAlexander Kabaev#undef nearbyintf 117*f8a1b7d9SAlexander Kabaev#undef nearbyintl 118*f8a1b7d9SAlexander Kabaev#undef nextafter 119*f8a1b7d9SAlexander Kabaev#undef nextafterf 120*f8a1b7d9SAlexander Kabaev#undef nextafterl 121*f8a1b7d9SAlexander Kabaev#undef nexttoward 122*f8a1b7d9SAlexander Kabaev#undef nexttowardf 123*f8a1b7d9SAlexander Kabaev#undef nexttowardl 124*f8a1b7d9SAlexander Kabaev#undef remainder 125*f8a1b7d9SAlexander Kabaev#undef remainderf 126*f8a1b7d9SAlexander Kabaev#undef remainderl 127*f8a1b7d9SAlexander Kabaev#undef remquo 128*f8a1b7d9SAlexander Kabaev#undef remquo 129*f8a1b7d9SAlexander Kabaev#undef remquo 130*f8a1b7d9SAlexander Kabaev#undef rint 131*f8a1b7d9SAlexander Kabaev#undef rintf 132*f8a1b7d9SAlexander Kabaev#undef rintl 133*f8a1b7d9SAlexander Kabaev#undef round 134*f8a1b7d9SAlexander Kabaev#undef roundf 135*f8a1b7d9SAlexander Kabaev#undef roundl 136*f8a1b7d9SAlexander Kabaev#undef scalbln 137*f8a1b7d9SAlexander Kabaev#undef scalblnf 138*f8a1b7d9SAlexander Kabaev#undef scalblnl 139*f8a1b7d9SAlexander Kabaev#undef scalbn 140*f8a1b7d9SAlexander Kabaev#undef scalbnf 141*f8a1b7d9SAlexander Kabaev#undef scalbnl 142*f8a1b7d9SAlexander Kabaev#undef tgamma 143*f8a1b7d9SAlexander Kabaev#undef tgammaf 144*f8a1b7d9SAlexander Kabaev#undef tgammal 145*f8a1b7d9SAlexander Kabaev#undef trunc 146*f8a1b7d9SAlexander Kabaev#undef truncf 147*f8a1b7d9SAlexander Kabaev#undef truncl 148*f8a1b7d9SAlexander Kabaev 149*f8a1b7d9SAlexander Kabaev#endif 150*f8a1b7d9SAlexander Kabaev 151*f8a1b7d9SAlexander Kabaev// namespace std::tr1 152*f8a1b7d9SAlexander Kabaevnamespace std 153*f8a1b7d9SAlexander Kabaev{ 154*f8a1b7d9SAlexander Kabaev_GLIBCXX_BEGIN_NAMESPACE(tr1) 155*f8a1b7d9SAlexander Kabaev 156*f8a1b7d9SAlexander Kabaev#if _GLIBCXX_USE_C99_MATH_TR1 157*f8a1b7d9SAlexander Kabaev 158*f8a1b7d9SAlexander Kabaev // types 159*f8a1b7d9SAlexander Kabaev using ::double_t; 160*f8a1b7d9SAlexander Kabaev using ::float_t; 161*f8a1b7d9SAlexander Kabaev 162*f8a1b7d9SAlexander Kabaev // functions 163*f8a1b7d9SAlexander Kabaev using ::acosh; 164*f8a1b7d9SAlexander Kabaev using ::acoshf; 165*f8a1b7d9SAlexander Kabaev using ::acoshl; 166*f8a1b7d9SAlexander Kabaev 167*f8a1b7d9SAlexander Kabaev using ::asinh; 168*f8a1b7d9SAlexander Kabaev using ::asinhf; 169*f8a1b7d9SAlexander Kabaev using ::asinhl; 170*f8a1b7d9SAlexander Kabaev 171*f8a1b7d9SAlexander Kabaev using ::atanh; 172*f8a1b7d9SAlexander Kabaev using ::atanhf; 173*f8a1b7d9SAlexander Kabaev using ::atanhl; 174*f8a1b7d9SAlexander Kabaev 175*f8a1b7d9SAlexander Kabaev using ::cbrt; 176*f8a1b7d9SAlexander Kabaev using ::cbrtf; 177*f8a1b7d9SAlexander Kabaev using ::cbrtl; 178*f8a1b7d9SAlexander Kabaev 179*f8a1b7d9SAlexander Kabaev using ::copysign; 180*f8a1b7d9SAlexander Kabaev using ::copysignf; 181*f8a1b7d9SAlexander Kabaev using ::copysignl; 182*f8a1b7d9SAlexander Kabaev 183*f8a1b7d9SAlexander Kabaev using ::erf; 184*f8a1b7d9SAlexander Kabaev using ::erff; 185*f8a1b7d9SAlexander Kabaev using ::erfl; 186*f8a1b7d9SAlexander Kabaev 187*f8a1b7d9SAlexander Kabaev using ::erfc; 188*f8a1b7d9SAlexander Kabaev using ::erfcf; 189*f8a1b7d9SAlexander Kabaev using ::erfcl; 190*f8a1b7d9SAlexander Kabaev 191*f8a1b7d9SAlexander Kabaev using ::exp2; 192*f8a1b7d9SAlexander Kabaev using ::exp2f; 193*f8a1b7d9SAlexander Kabaev using ::exp2l; 194*f8a1b7d9SAlexander Kabaev 195*f8a1b7d9SAlexander Kabaev using ::expm1; 196*f8a1b7d9SAlexander Kabaev using ::expm1f; 197*f8a1b7d9SAlexander Kabaev using ::expm1l; 198*f8a1b7d9SAlexander Kabaev 199*f8a1b7d9SAlexander Kabaev using ::fdim; 200*f8a1b7d9SAlexander Kabaev using ::fdimf; 201*f8a1b7d9SAlexander Kabaev using ::fdiml; 202*f8a1b7d9SAlexander Kabaev 203*f8a1b7d9SAlexander Kabaev using ::fma; 204*f8a1b7d9SAlexander Kabaev using ::fmaf; 205*f8a1b7d9SAlexander Kabaev using ::fmal; 206*f8a1b7d9SAlexander Kabaev 207*f8a1b7d9SAlexander Kabaev using ::fmax; 208*f8a1b7d9SAlexander Kabaev using ::fmaxf; 209*f8a1b7d9SAlexander Kabaev using ::fmaxl; 210*f8a1b7d9SAlexander Kabaev 211*f8a1b7d9SAlexander Kabaev using ::fmin; 212*f8a1b7d9SAlexander Kabaev using ::fminf; 213*f8a1b7d9SAlexander Kabaev using ::fminl; 214*f8a1b7d9SAlexander Kabaev 215*f8a1b7d9SAlexander Kabaev using ::hypot; 216*f8a1b7d9SAlexander Kabaev using ::hypotf; 217*f8a1b7d9SAlexander Kabaev using ::hypotl; 218*f8a1b7d9SAlexander Kabaev 219*f8a1b7d9SAlexander Kabaev using ::ilogb; 220*f8a1b7d9SAlexander Kabaev using ::ilogbf; 221*f8a1b7d9SAlexander Kabaev using ::ilogbl; 222*f8a1b7d9SAlexander Kabaev 223*f8a1b7d9SAlexander Kabaev using ::lgamma; 224*f8a1b7d9SAlexander Kabaev using ::lgammaf; 225*f8a1b7d9SAlexander Kabaev using ::lgammal; 226*f8a1b7d9SAlexander Kabaev 227*f8a1b7d9SAlexander Kabaev using ::llrint; 228*f8a1b7d9SAlexander Kabaev using ::llrintf; 229*f8a1b7d9SAlexander Kabaev using ::llrintl; 230*f8a1b7d9SAlexander Kabaev 231*f8a1b7d9SAlexander Kabaev using ::llround; 232*f8a1b7d9SAlexander Kabaev using ::llroundf; 233*f8a1b7d9SAlexander Kabaev using ::llroundl; 234*f8a1b7d9SAlexander Kabaev 235*f8a1b7d9SAlexander Kabaev using ::log1p; 236*f8a1b7d9SAlexander Kabaev using ::log1pf; 237*f8a1b7d9SAlexander Kabaev using ::log1pl; 238*f8a1b7d9SAlexander Kabaev 239*f8a1b7d9SAlexander Kabaev using ::log2; 240*f8a1b7d9SAlexander Kabaev using ::log2f; 241*f8a1b7d9SAlexander Kabaev using ::log2l; 242*f8a1b7d9SAlexander Kabaev 243*f8a1b7d9SAlexander Kabaev using ::logb; 244*f8a1b7d9SAlexander Kabaev using ::logbf; 245*f8a1b7d9SAlexander Kabaev using ::logbl; 246*f8a1b7d9SAlexander Kabaev 247*f8a1b7d9SAlexander Kabaev using ::lrint; 248*f8a1b7d9SAlexander Kabaev using ::lrintf; 249*f8a1b7d9SAlexander Kabaev using ::lrintl; 250*f8a1b7d9SAlexander Kabaev 251*f8a1b7d9SAlexander Kabaev using ::lround; 252*f8a1b7d9SAlexander Kabaev using ::lroundf; 253*f8a1b7d9SAlexander Kabaev using ::lroundl; 254*f8a1b7d9SAlexander Kabaev 255*f8a1b7d9SAlexander Kabaev using ::nan; 256*f8a1b7d9SAlexander Kabaev using ::nanf; 257*f8a1b7d9SAlexander Kabaev using ::nanl; 258*f8a1b7d9SAlexander Kabaev 259*f8a1b7d9SAlexander Kabaev using ::nearbyint; 260*f8a1b7d9SAlexander Kabaev using ::nearbyintf; 261*f8a1b7d9SAlexander Kabaev using ::nearbyintl; 262*f8a1b7d9SAlexander Kabaev 263*f8a1b7d9SAlexander Kabaev using ::nextafter; 264*f8a1b7d9SAlexander Kabaev using ::nextafterf; 265*f8a1b7d9SAlexander Kabaev using ::nextafterl; 266*f8a1b7d9SAlexander Kabaev 267*f8a1b7d9SAlexander Kabaev using ::nexttoward; 268*f8a1b7d9SAlexander Kabaev using ::nexttowardf; 269*f8a1b7d9SAlexander Kabaev using ::nexttowardl; 270*f8a1b7d9SAlexander Kabaev 271*f8a1b7d9SAlexander Kabaev using ::remainder; 272*f8a1b7d9SAlexander Kabaev using ::remainderf; 273*f8a1b7d9SAlexander Kabaev using ::remainderl; 274*f8a1b7d9SAlexander Kabaev 275*f8a1b7d9SAlexander Kabaev using ::remquo; 276*f8a1b7d9SAlexander Kabaev using ::remquo; 277*f8a1b7d9SAlexander Kabaev using ::remquo; 278*f8a1b7d9SAlexander Kabaev 279*f8a1b7d9SAlexander Kabaev using ::rint; 280*f8a1b7d9SAlexander Kabaev using ::rintf; 281*f8a1b7d9SAlexander Kabaev using ::rintl; 282*f8a1b7d9SAlexander Kabaev 283*f8a1b7d9SAlexander Kabaev using ::round; 284*f8a1b7d9SAlexander Kabaev using ::roundf; 285*f8a1b7d9SAlexander Kabaev using ::roundl; 286*f8a1b7d9SAlexander Kabaev 287*f8a1b7d9SAlexander Kabaev using ::scalbln; 288*f8a1b7d9SAlexander Kabaev using ::scalblnf; 289*f8a1b7d9SAlexander Kabaev using ::scalblnl; 290*f8a1b7d9SAlexander Kabaev 291*f8a1b7d9SAlexander Kabaev using ::scalbn; 292*f8a1b7d9SAlexander Kabaev using ::scalbnf; 293*f8a1b7d9SAlexander Kabaev using ::scalbnl; 294*f8a1b7d9SAlexander Kabaev 295*f8a1b7d9SAlexander Kabaev using ::tgamma; 296*f8a1b7d9SAlexander Kabaev using ::tgammaf; 297*f8a1b7d9SAlexander Kabaev using ::tgammal; 298*f8a1b7d9SAlexander Kabaev 299*f8a1b7d9SAlexander Kabaev using ::trunc; 300*f8a1b7d9SAlexander Kabaev using ::truncf; 301*f8a1b7d9SAlexander Kabaev using ::truncl; 302*f8a1b7d9SAlexander Kabaev 303*f8a1b7d9SAlexander Kabaev#endif 304*f8a1b7d9SAlexander Kabaev 305*f8a1b7d9SAlexander Kabaev#if _GLIBCXX_USE_C99_MATH 306*f8a1b7d9SAlexander Kabaev#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC 307*f8a1b7d9SAlexander Kabaev 308*f8a1b7d9SAlexander Kabaev /// @brief Function template definitions [8.16.3]. 309*f8a1b7d9SAlexander Kabaev // 310*f8a1b7d9SAlexander Kabaev using std::signbit; 311*f8a1b7d9SAlexander Kabaev 312*f8a1b7d9SAlexander Kabaev using std::fpclassify; 313*f8a1b7d9SAlexander Kabaev 314*f8a1b7d9SAlexander Kabaev using std::isfinite; 315*f8a1b7d9SAlexander Kabaev using std::isinf; 316*f8a1b7d9SAlexander Kabaev using std::isnan; 317*f8a1b7d9SAlexander Kabaev using std::isnormal; 318*f8a1b7d9SAlexander Kabaev 319*f8a1b7d9SAlexander Kabaev using std::isgreater; 320*f8a1b7d9SAlexander Kabaev using std::isgreaterequal; 321*f8a1b7d9SAlexander Kabaev using std::isless; 322*f8a1b7d9SAlexander Kabaev using std::islessequal; 323*f8a1b7d9SAlexander Kabaev using std::islessgreater; 324*f8a1b7d9SAlexander Kabaev using std::isunordered; 325*f8a1b7d9SAlexander Kabaev#endif 326*f8a1b7d9SAlexander Kabaev#endif 327*f8a1b7d9SAlexander Kabaev 328*f8a1b7d9SAlexander Kabaev#if _GLIBCXX_USE_C99_MATH_TR1 329*f8a1b7d9SAlexander Kabaev 330*f8a1b7d9SAlexander Kabaev /// @brief Additional overloads [8.16.4]. 331*f8a1b7d9SAlexander Kabaev // 332*f8a1b7d9SAlexander Kabaev using std::acos; 333*f8a1b7d9SAlexander Kabaev 334*f8a1b7d9SAlexander Kabaev inline float 335*f8a1b7d9SAlexander Kabaev acosh(float __x) 336*f8a1b7d9SAlexander Kabaev { return __builtin_acoshf(__x); } 337*f8a1b7d9SAlexander Kabaev 338*f8a1b7d9SAlexander Kabaev inline long double 339*f8a1b7d9SAlexander Kabaev acosh(long double __x) 340*f8a1b7d9SAlexander Kabaev { return __builtin_acoshl(__x); } 341*f8a1b7d9SAlexander Kabaev 342*f8a1b7d9SAlexander Kabaev template<typename _Tp> 343*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 344*f8a1b7d9SAlexander Kabaev acosh(_Tp __x) 345*f8a1b7d9SAlexander Kabaev { 346*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 347*f8a1b7d9SAlexander Kabaev return acosh(__type(__x)); 348*f8a1b7d9SAlexander Kabaev } 349*f8a1b7d9SAlexander Kabaev 350*f8a1b7d9SAlexander Kabaev using std::asin; 351*f8a1b7d9SAlexander Kabaev 352*f8a1b7d9SAlexander Kabaev inline float 353*f8a1b7d9SAlexander Kabaev asinh(float __x) 354*f8a1b7d9SAlexander Kabaev { return __builtin_asinhf(__x); } 355*f8a1b7d9SAlexander Kabaev 356*f8a1b7d9SAlexander Kabaev inline long double 357*f8a1b7d9SAlexander Kabaev asinh(long double __x) 358*f8a1b7d9SAlexander Kabaev { return __builtin_asinhl(__x); } 359*f8a1b7d9SAlexander Kabaev 360*f8a1b7d9SAlexander Kabaev template<typename _Tp> 361*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 362*f8a1b7d9SAlexander Kabaev asinh(_Tp __x) 363*f8a1b7d9SAlexander Kabaev { 364*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 365*f8a1b7d9SAlexander Kabaev return asinh(__type(__x)); 366*f8a1b7d9SAlexander Kabaev } 367*f8a1b7d9SAlexander Kabaev 368*f8a1b7d9SAlexander Kabaev using std::atan; 369*f8a1b7d9SAlexander Kabaev 370*f8a1b7d9SAlexander Kabaev // Workaround for c++/21682. 371*f8a1b7d9SAlexander Kabaev namespace __detail 372*f8a1b7d9SAlexander Kabaev { 373*f8a1b7d9SAlexander Kabaev template<typename _Tp, typename _Up> 374*f8a1b7d9SAlexander Kabaev inline typename 375*f8a1b7d9SAlexander Kabaev __gnu_cxx::__enable_if<std::__is_floating<_Tp>::__value 376*f8a1b7d9SAlexander Kabaev || std::__is_floating<_Up>::__value, 377*f8a1b7d9SAlexander Kabaev typename 378*f8a1b7d9SAlexander Kabaev std::tr1::__promote_2<_Tp, _Up>::__type>::__type 379*f8a1b7d9SAlexander Kabaev atan2(_Tp __y, _Up __x) 380*f8a1b7d9SAlexander Kabaev { 381*f8a1b7d9SAlexander Kabaev typedef typename std::tr1::__promote_2<_Tp, _Up>::__type __type; 382*f8a1b7d9SAlexander Kabaev return std::atan2(__type(__y), __type(__x)); 383*f8a1b7d9SAlexander Kabaev } 384*f8a1b7d9SAlexander Kabaev } // namespace __detail 385*f8a1b7d9SAlexander Kabaev 386*f8a1b7d9SAlexander Kabaev using std::atan2; 387*f8a1b7d9SAlexander Kabaev using __detail::atan2; 388*f8a1b7d9SAlexander Kabaev 389*f8a1b7d9SAlexander Kabaev inline float 390*f8a1b7d9SAlexander Kabaev atanh(float __x) 391*f8a1b7d9SAlexander Kabaev { return __builtin_atanhf(__x); } 392*f8a1b7d9SAlexander Kabaev 393*f8a1b7d9SAlexander Kabaev inline long double 394*f8a1b7d9SAlexander Kabaev atanh(long double __x) 395*f8a1b7d9SAlexander Kabaev { return __builtin_atanhl(__x); } 396*f8a1b7d9SAlexander Kabaev 397*f8a1b7d9SAlexander Kabaev template<typename _Tp> 398*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 399*f8a1b7d9SAlexander Kabaev atanh(_Tp __x) 400*f8a1b7d9SAlexander Kabaev { 401*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 402*f8a1b7d9SAlexander Kabaev return atanh(__type(__x)); 403*f8a1b7d9SAlexander Kabaev } 404*f8a1b7d9SAlexander Kabaev 405*f8a1b7d9SAlexander Kabaev inline float 406*f8a1b7d9SAlexander Kabaev cbrt(float __x) 407*f8a1b7d9SAlexander Kabaev { return __builtin_cbrtf(__x); } 408*f8a1b7d9SAlexander Kabaev 409*f8a1b7d9SAlexander Kabaev inline long double 410*f8a1b7d9SAlexander Kabaev cbrt(long double __x) 411*f8a1b7d9SAlexander Kabaev { return __builtin_cbrtl(__x); } 412*f8a1b7d9SAlexander Kabaev 413*f8a1b7d9SAlexander Kabaev template<typename _Tp> 414*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 415*f8a1b7d9SAlexander Kabaev cbrt(_Tp __x) 416*f8a1b7d9SAlexander Kabaev { 417*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 418*f8a1b7d9SAlexander Kabaev return cbrt(__type(__x)); 419*f8a1b7d9SAlexander Kabaev } 420*f8a1b7d9SAlexander Kabaev 421*f8a1b7d9SAlexander Kabaev using std::ceil; 422*f8a1b7d9SAlexander Kabaev 423*f8a1b7d9SAlexander Kabaev inline float 424*f8a1b7d9SAlexander Kabaev copysign(float __x, float __y) 425*f8a1b7d9SAlexander Kabaev { return __builtin_copysignf(__x, __y); } 426*f8a1b7d9SAlexander Kabaev 427*f8a1b7d9SAlexander Kabaev inline long double 428*f8a1b7d9SAlexander Kabaev copysign(long double __x, long double __y) 429*f8a1b7d9SAlexander Kabaev { return __builtin_copysignl(__x, __y); } 430*f8a1b7d9SAlexander Kabaev 431*f8a1b7d9SAlexander Kabaev template<typename _Tp, typename _Up> 432*f8a1b7d9SAlexander Kabaev inline typename __promote_2<_Tp, _Up>::__type 433*f8a1b7d9SAlexander Kabaev copysign(_Tp __x, _Up __y) 434*f8a1b7d9SAlexander Kabaev { 435*f8a1b7d9SAlexander Kabaev typedef typename __promote_2<_Tp, _Up>::__type __type; 436*f8a1b7d9SAlexander Kabaev return copysign(__type(__x), __type(__y)); 437*f8a1b7d9SAlexander Kabaev } 438*f8a1b7d9SAlexander Kabaev 439*f8a1b7d9SAlexander Kabaev using std::cos; 440*f8a1b7d9SAlexander Kabaev using std::cosh; 441*f8a1b7d9SAlexander Kabaev 442*f8a1b7d9SAlexander Kabaev inline float 443*f8a1b7d9SAlexander Kabaev erf(float __x) 444*f8a1b7d9SAlexander Kabaev { return __builtin_erff(__x); } 445*f8a1b7d9SAlexander Kabaev 446*f8a1b7d9SAlexander Kabaev inline long double 447*f8a1b7d9SAlexander Kabaev erf(long double __x) 448*f8a1b7d9SAlexander Kabaev { return __builtin_erfl(__x); } 449*f8a1b7d9SAlexander Kabaev 450*f8a1b7d9SAlexander Kabaev template<typename _Tp> 451*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 452*f8a1b7d9SAlexander Kabaev erf(_Tp __x) 453*f8a1b7d9SAlexander Kabaev { 454*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 455*f8a1b7d9SAlexander Kabaev return erf(__type(__x)); 456*f8a1b7d9SAlexander Kabaev } 457*f8a1b7d9SAlexander Kabaev 458*f8a1b7d9SAlexander Kabaev inline float 459*f8a1b7d9SAlexander Kabaev erfc(float __x) 460*f8a1b7d9SAlexander Kabaev { return __builtin_erfcf(__x); } 461*f8a1b7d9SAlexander Kabaev 462*f8a1b7d9SAlexander Kabaev inline long double 463*f8a1b7d9SAlexander Kabaev erfc(long double __x) 464*f8a1b7d9SAlexander Kabaev { return __builtin_erfcl(__x); } 465*f8a1b7d9SAlexander Kabaev 466*f8a1b7d9SAlexander Kabaev template<typename _Tp> 467*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 468*f8a1b7d9SAlexander Kabaev erfc(_Tp __x) 469*f8a1b7d9SAlexander Kabaev { 470*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 471*f8a1b7d9SAlexander Kabaev return erfc(__type(__x)); 472*f8a1b7d9SAlexander Kabaev } 473*f8a1b7d9SAlexander Kabaev 474*f8a1b7d9SAlexander Kabaev using std::exp; 475*f8a1b7d9SAlexander Kabaev 476*f8a1b7d9SAlexander Kabaev inline float 477*f8a1b7d9SAlexander Kabaev exp2(float __x) 478*f8a1b7d9SAlexander Kabaev { return __builtin_exp2f(__x); } 479*f8a1b7d9SAlexander Kabaev 480*f8a1b7d9SAlexander Kabaev inline long double 481*f8a1b7d9SAlexander Kabaev exp2(long double __x) 482*f8a1b7d9SAlexander Kabaev { return __builtin_exp2l(__x); } 483*f8a1b7d9SAlexander Kabaev 484*f8a1b7d9SAlexander Kabaev template<typename _Tp> 485*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 486*f8a1b7d9SAlexander Kabaev exp2(_Tp __x) 487*f8a1b7d9SAlexander Kabaev { 488*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 489*f8a1b7d9SAlexander Kabaev return exp2(__type(__x)); 490*f8a1b7d9SAlexander Kabaev } 491*f8a1b7d9SAlexander Kabaev 492*f8a1b7d9SAlexander Kabaev inline float 493*f8a1b7d9SAlexander Kabaev expm1(float __x) 494*f8a1b7d9SAlexander Kabaev { return __builtin_expm1f(__x); } 495*f8a1b7d9SAlexander Kabaev 496*f8a1b7d9SAlexander Kabaev inline long double 497*f8a1b7d9SAlexander Kabaev expm1(long double __x) 498*f8a1b7d9SAlexander Kabaev { return __builtin_expm1l(__x); } 499*f8a1b7d9SAlexander Kabaev 500*f8a1b7d9SAlexander Kabaev template<typename _Tp> 501*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 502*f8a1b7d9SAlexander Kabaev expm1(_Tp __x) 503*f8a1b7d9SAlexander Kabaev { 504*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 505*f8a1b7d9SAlexander Kabaev return expm1(__type(__x)); 506*f8a1b7d9SAlexander Kabaev } 507*f8a1b7d9SAlexander Kabaev 508*f8a1b7d9SAlexander Kabaev using std::fabs; 509*f8a1b7d9SAlexander Kabaev 510*f8a1b7d9SAlexander Kabaev inline float 511*f8a1b7d9SAlexander Kabaev fdim(float __x, float __y) 512*f8a1b7d9SAlexander Kabaev { return __builtin_fdimf(__x, __y); } 513*f8a1b7d9SAlexander Kabaev 514*f8a1b7d9SAlexander Kabaev inline long double 515*f8a1b7d9SAlexander Kabaev fdim(long double __x, long double __y) 516*f8a1b7d9SAlexander Kabaev { return __builtin_fdiml(__x, __y); } 517*f8a1b7d9SAlexander Kabaev 518*f8a1b7d9SAlexander Kabaev template<typename _Tp, typename _Up> 519*f8a1b7d9SAlexander Kabaev inline typename __promote_2<_Tp, _Up>::__type 520*f8a1b7d9SAlexander Kabaev fdim(_Tp __x, _Up __y) 521*f8a1b7d9SAlexander Kabaev { 522*f8a1b7d9SAlexander Kabaev typedef typename __promote_2<_Tp, _Up>::__type __type; 523*f8a1b7d9SAlexander Kabaev return fdim(__type(__x), __type(__y)); 524*f8a1b7d9SAlexander Kabaev } 525*f8a1b7d9SAlexander Kabaev 526*f8a1b7d9SAlexander Kabaev using std::floor; 527*f8a1b7d9SAlexander Kabaev 528*f8a1b7d9SAlexander Kabaev inline float 529*f8a1b7d9SAlexander Kabaev fma(float __x, float __y, float __z) 530*f8a1b7d9SAlexander Kabaev { return __builtin_fmaf(__x, __y, __z); } 531*f8a1b7d9SAlexander Kabaev 532*f8a1b7d9SAlexander Kabaev inline long double 533*f8a1b7d9SAlexander Kabaev fma(long double __x, long double __y, long double __z) 534*f8a1b7d9SAlexander Kabaev { return __builtin_fmal(__x, __y, __z); } 535*f8a1b7d9SAlexander Kabaev 536*f8a1b7d9SAlexander Kabaev template<typename _Tp, typename _Up, typename _Vp> 537*f8a1b7d9SAlexander Kabaev inline typename __promote_3<_Tp, _Up, _Vp>::__type 538*f8a1b7d9SAlexander Kabaev fma(_Tp __x, _Up __y, _Vp __z) 539*f8a1b7d9SAlexander Kabaev { 540*f8a1b7d9SAlexander Kabaev typedef typename __promote_3<_Tp, _Up, _Vp>::__type __type; 541*f8a1b7d9SAlexander Kabaev return fma(__type(__x), __type(__y), __type(__z)); 542*f8a1b7d9SAlexander Kabaev } 543*f8a1b7d9SAlexander Kabaev 544*f8a1b7d9SAlexander Kabaev inline float 545*f8a1b7d9SAlexander Kabaev fmax(float __x, float __y) 546*f8a1b7d9SAlexander Kabaev { return __builtin_fmaxf(__x, __y); } 547*f8a1b7d9SAlexander Kabaev 548*f8a1b7d9SAlexander Kabaev inline long double 549*f8a1b7d9SAlexander Kabaev fmax(long double __x, long double __y) 550*f8a1b7d9SAlexander Kabaev { return __builtin_fmaxl(__x, __y); } 551*f8a1b7d9SAlexander Kabaev 552*f8a1b7d9SAlexander Kabaev template<typename _Tp, typename _Up> 553*f8a1b7d9SAlexander Kabaev inline typename __promote_2<_Tp, _Up>::__type 554*f8a1b7d9SAlexander Kabaev fmax(_Tp __x, _Up __y) 555*f8a1b7d9SAlexander Kabaev { 556*f8a1b7d9SAlexander Kabaev typedef typename __promote_2<_Tp, _Up>::__type __type; 557*f8a1b7d9SAlexander Kabaev return fmax(__type(__x), __type(__y)); 558*f8a1b7d9SAlexander Kabaev } 559*f8a1b7d9SAlexander Kabaev 560*f8a1b7d9SAlexander Kabaev inline float 561*f8a1b7d9SAlexander Kabaev fmin(float __x, float __y) 562*f8a1b7d9SAlexander Kabaev { return __builtin_fminf(__x, __y); } 563*f8a1b7d9SAlexander Kabaev 564*f8a1b7d9SAlexander Kabaev inline long double 565*f8a1b7d9SAlexander Kabaev fmin(long double __x, long double __y) 566*f8a1b7d9SAlexander Kabaev { return __builtin_fminl(__x, __y); } 567*f8a1b7d9SAlexander Kabaev 568*f8a1b7d9SAlexander Kabaev template<typename _Tp, typename _Up> 569*f8a1b7d9SAlexander Kabaev inline typename __promote_2<_Tp, _Up>::__type 570*f8a1b7d9SAlexander Kabaev fmin(_Tp __x, _Up __y) 571*f8a1b7d9SAlexander Kabaev { 572*f8a1b7d9SAlexander Kabaev typedef typename __promote_2<_Tp, _Up>::__type __type; 573*f8a1b7d9SAlexander Kabaev return fmin(__type(__x), __type(__y)); 574*f8a1b7d9SAlexander Kabaev } 575*f8a1b7d9SAlexander Kabaev 576*f8a1b7d9SAlexander Kabaev using std::fmod; 577*f8a1b7d9SAlexander Kabaev using std::frexp; 578*f8a1b7d9SAlexander Kabaev 579*f8a1b7d9SAlexander Kabaev inline float 580*f8a1b7d9SAlexander Kabaev hypot(float __x, float __y) 581*f8a1b7d9SAlexander Kabaev { return __builtin_hypotf(__x, __y); } 582*f8a1b7d9SAlexander Kabaev 583*f8a1b7d9SAlexander Kabaev inline long double 584*f8a1b7d9SAlexander Kabaev hypot(long double __x, long double __y) 585*f8a1b7d9SAlexander Kabaev { return __builtin_hypotl(__x, __y); } 586*f8a1b7d9SAlexander Kabaev 587*f8a1b7d9SAlexander Kabaev template<typename _Tp, typename _Up> 588*f8a1b7d9SAlexander Kabaev inline typename __promote_2<_Tp, _Up>::__type 589*f8a1b7d9SAlexander Kabaev hypot(_Tp __x, _Up __y) 590*f8a1b7d9SAlexander Kabaev { 591*f8a1b7d9SAlexander Kabaev typedef typename __promote_2<_Tp, _Up>::__type __type; 592*f8a1b7d9SAlexander Kabaev return hypot(__type(__x), __type(__y)); 593*f8a1b7d9SAlexander Kabaev } 594*f8a1b7d9SAlexander Kabaev 595*f8a1b7d9SAlexander Kabaev inline int 596*f8a1b7d9SAlexander Kabaev ilogb(float __x) 597*f8a1b7d9SAlexander Kabaev { return __builtin_ilogbf(__x); } 598*f8a1b7d9SAlexander Kabaev 599*f8a1b7d9SAlexander Kabaev inline int 600*f8a1b7d9SAlexander Kabaev ilogb(long double __x) 601*f8a1b7d9SAlexander Kabaev { return __builtin_ilogbl(__x); } 602*f8a1b7d9SAlexander Kabaev 603*f8a1b7d9SAlexander Kabaev template<typename _Tp> 604*f8a1b7d9SAlexander Kabaev inline int 605*f8a1b7d9SAlexander Kabaev ilogb(_Tp __x) 606*f8a1b7d9SAlexander Kabaev { 607*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 608*f8a1b7d9SAlexander Kabaev return ilogb(__type(__x)); 609*f8a1b7d9SAlexander Kabaev } 610*f8a1b7d9SAlexander Kabaev 611*f8a1b7d9SAlexander Kabaev using std::ldexp; 612*f8a1b7d9SAlexander Kabaev 613*f8a1b7d9SAlexander Kabaev inline float 614*f8a1b7d9SAlexander Kabaev lgamma(float __x) 615*f8a1b7d9SAlexander Kabaev { return __builtin_lgammaf(__x); } 616*f8a1b7d9SAlexander Kabaev 617*f8a1b7d9SAlexander Kabaev inline long double 618*f8a1b7d9SAlexander Kabaev lgamma(long double __x) 619*f8a1b7d9SAlexander Kabaev { return __builtin_lgammal(__x); } 620*f8a1b7d9SAlexander Kabaev 621*f8a1b7d9SAlexander Kabaev template<typename _Tp> 622*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 623*f8a1b7d9SAlexander Kabaev lgamma(_Tp __x) 624*f8a1b7d9SAlexander Kabaev { 625*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 626*f8a1b7d9SAlexander Kabaev return lgamma(__type(__x)); 627*f8a1b7d9SAlexander Kabaev } 628*f8a1b7d9SAlexander Kabaev 629*f8a1b7d9SAlexander Kabaev inline long long 630*f8a1b7d9SAlexander Kabaev llrint(float __x) 631*f8a1b7d9SAlexander Kabaev { return __builtin_llrintf(__x); } 632*f8a1b7d9SAlexander Kabaev 633*f8a1b7d9SAlexander Kabaev inline long long 634*f8a1b7d9SAlexander Kabaev llrint(long double __x) 635*f8a1b7d9SAlexander Kabaev { return __builtin_llrintl(__x); } 636*f8a1b7d9SAlexander Kabaev 637*f8a1b7d9SAlexander Kabaev template<typename _Tp> 638*f8a1b7d9SAlexander Kabaev inline long long 639*f8a1b7d9SAlexander Kabaev llrint(_Tp __x) 640*f8a1b7d9SAlexander Kabaev { 641*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 642*f8a1b7d9SAlexander Kabaev return llrint(__type(__x)); 643*f8a1b7d9SAlexander Kabaev } 644*f8a1b7d9SAlexander Kabaev 645*f8a1b7d9SAlexander Kabaev inline long long 646*f8a1b7d9SAlexander Kabaev llround(float __x) 647*f8a1b7d9SAlexander Kabaev { return __builtin_llroundf(__x); } 648*f8a1b7d9SAlexander Kabaev 649*f8a1b7d9SAlexander Kabaev inline long long 650*f8a1b7d9SAlexander Kabaev llround(long double __x) 651*f8a1b7d9SAlexander Kabaev { return __builtin_llroundl(__x); } 652*f8a1b7d9SAlexander Kabaev 653*f8a1b7d9SAlexander Kabaev template<typename _Tp> 654*f8a1b7d9SAlexander Kabaev inline long long 655*f8a1b7d9SAlexander Kabaev llround(_Tp __x) 656*f8a1b7d9SAlexander Kabaev { 657*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 658*f8a1b7d9SAlexander Kabaev return llround(__type(__x)); 659*f8a1b7d9SAlexander Kabaev } 660*f8a1b7d9SAlexander Kabaev 661*f8a1b7d9SAlexander Kabaev using std::log; 662*f8a1b7d9SAlexander Kabaev using std::log10; 663*f8a1b7d9SAlexander Kabaev 664*f8a1b7d9SAlexander Kabaev inline float 665*f8a1b7d9SAlexander Kabaev log1p(float __x) 666*f8a1b7d9SAlexander Kabaev { return __builtin_log1pf(__x); } 667*f8a1b7d9SAlexander Kabaev 668*f8a1b7d9SAlexander Kabaev inline long double 669*f8a1b7d9SAlexander Kabaev log1p(long double __x) 670*f8a1b7d9SAlexander Kabaev { return __builtin_log1pl(__x); } 671*f8a1b7d9SAlexander Kabaev 672*f8a1b7d9SAlexander Kabaev template<typename _Tp> 673*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 674*f8a1b7d9SAlexander Kabaev log1p(_Tp __x) 675*f8a1b7d9SAlexander Kabaev { 676*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 677*f8a1b7d9SAlexander Kabaev return log1p(__type(__x)); 678*f8a1b7d9SAlexander Kabaev } 679*f8a1b7d9SAlexander Kabaev 680*f8a1b7d9SAlexander Kabaev // DR 568. 681*f8a1b7d9SAlexander Kabaev inline float 682*f8a1b7d9SAlexander Kabaev log2(float __x) 683*f8a1b7d9SAlexander Kabaev { return __builtin_log2f(__x); } 684*f8a1b7d9SAlexander Kabaev 685*f8a1b7d9SAlexander Kabaev inline long double 686*f8a1b7d9SAlexander Kabaev log2(long double __x) 687*f8a1b7d9SAlexander Kabaev { return __builtin_log2l(__x); } 688*f8a1b7d9SAlexander Kabaev 689*f8a1b7d9SAlexander Kabaev template<typename _Tp> 690*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 691*f8a1b7d9SAlexander Kabaev log2(_Tp __x) 692*f8a1b7d9SAlexander Kabaev { 693*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 694*f8a1b7d9SAlexander Kabaev return log2(__type(__x)); 695*f8a1b7d9SAlexander Kabaev } 696*f8a1b7d9SAlexander Kabaev 697*f8a1b7d9SAlexander Kabaev inline float 698*f8a1b7d9SAlexander Kabaev logb(float __x) 699*f8a1b7d9SAlexander Kabaev { return __builtin_logbf(__x); } 700*f8a1b7d9SAlexander Kabaev 701*f8a1b7d9SAlexander Kabaev inline long double 702*f8a1b7d9SAlexander Kabaev logb(long double __x) 703*f8a1b7d9SAlexander Kabaev { return __builtin_logbl(__x); } 704*f8a1b7d9SAlexander Kabaev 705*f8a1b7d9SAlexander Kabaev template<typename _Tp> 706*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 707*f8a1b7d9SAlexander Kabaev logb(_Tp __x) 708*f8a1b7d9SAlexander Kabaev { 709*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 710*f8a1b7d9SAlexander Kabaev return logb(__type(__x)); 711*f8a1b7d9SAlexander Kabaev } 712*f8a1b7d9SAlexander Kabaev 713*f8a1b7d9SAlexander Kabaev inline long 714*f8a1b7d9SAlexander Kabaev lrint(float __x) 715*f8a1b7d9SAlexander Kabaev { return __builtin_lrintf(__x); } 716*f8a1b7d9SAlexander Kabaev 717*f8a1b7d9SAlexander Kabaev inline long 718*f8a1b7d9SAlexander Kabaev lrint(long double __x) 719*f8a1b7d9SAlexander Kabaev { return __builtin_lrintl(__x); } 720*f8a1b7d9SAlexander Kabaev 721*f8a1b7d9SAlexander Kabaev template<typename _Tp> 722*f8a1b7d9SAlexander Kabaev inline long 723*f8a1b7d9SAlexander Kabaev lrint(_Tp __x) 724*f8a1b7d9SAlexander Kabaev { 725*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 726*f8a1b7d9SAlexander Kabaev return lrint(__type(__x)); 727*f8a1b7d9SAlexander Kabaev } 728*f8a1b7d9SAlexander Kabaev 729*f8a1b7d9SAlexander Kabaev inline long 730*f8a1b7d9SAlexander Kabaev lround(float __x) 731*f8a1b7d9SAlexander Kabaev { return __builtin_lroundf(__x); } 732*f8a1b7d9SAlexander Kabaev 733*f8a1b7d9SAlexander Kabaev inline long 734*f8a1b7d9SAlexander Kabaev lround(long double __x) 735*f8a1b7d9SAlexander Kabaev { return __builtin_lroundl(__x); } 736*f8a1b7d9SAlexander Kabaev 737*f8a1b7d9SAlexander Kabaev template<typename _Tp> 738*f8a1b7d9SAlexander Kabaev inline long 739*f8a1b7d9SAlexander Kabaev lround(_Tp __x) 740*f8a1b7d9SAlexander Kabaev { 741*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 742*f8a1b7d9SAlexander Kabaev return lround(__type(__x)); 743*f8a1b7d9SAlexander Kabaev } 744*f8a1b7d9SAlexander Kabaev 745*f8a1b7d9SAlexander Kabaev inline float 746*f8a1b7d9SAlexander Kabaev nearbyint(float __x) 747*f8a1b7d9SAlexander Kabaev { return __builtin_nearbyintf(__x); } 748*f8a1b7d9SAlexander Kabaev 749*f8a1b7d9SAlexander Kabaev inline long double 750*f8a1b7d9SAlexander Kabaev nearbyint(long double __x) 751*f8a1b7d9SAlexander Kabaev { return __builtin_nearbyintl(__x); } 752*f8a1b7d9SAlexander Kabaev 753*f8a1b7d9SAlexander Kabaev template<typename _Tp> 754*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 755*f8a1b7d9SAlexander Kabaev nearbyint(_Tp __x) 756*f8a1b7d9SAlexander Kabaev { 757*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 758*f8a1b7d9SAlexander Kabaev return nearbyint(__type(__x)); 759*f8a1b7d9SAlexander Kabaev } 760*f8a1b7d9SAlexander Kabaev 761*f8a1b7d9SAlexander Kabaev inline float 762*f8a1b7d9SAlexander Kabaev nextafter(float __x, float __y) 763*f8a1b7d9SAlexander Kabaev { return __builtin_nextafterf(__x, __y); } 764*f8a1b7d9SAlexander Kabaev 765*f8a1b7d9SAlexander Kabaev inline long double 766*f8a1b7d9SAlexander Kabaev nextafter(long double __x, long double __y) 767*f8a1b7d9SAlexander Kabaev { return __builtin_nextafterl(__x, __y); } 768*f8a1b7d9SAlexander Kabaev 769*f8a1b7d9SAlexander Kabaev template<typename _Tp, typename _Up> 770*f8a1b7d9SAlexander Kabaev inline typename __promote_2<_Tp, _Up>::__type 771*f8a1b7d9SAlexander Kabaev nextafter(_Tp __x, _Up __y) 772*f8a1b7d9SAlexander Kabaev { 773*f8a1b7d9SAlexander Kabaev typedef typename __promote_2<_Tp, _Up>::__type __type; 774*f8a1b7d9SAlexander Kabaev return nextafter(__type(__x), __type(__y)); 775*f8a1b7d9SAlexander Kabaev } 776*f8a1b7d9SAlexander Kabaev 777*f8a1b7d9SAlexander Kabaev inline float 778*f8a1b7d9SAlexander Kabaev nexttoward(float __x, long double __y) 779*f8a1b7d9SAlexander Kabaev { return __builtin_nexttowardf(__x, __y); } 780*f8a1b7d9SAlexander Kabaev 781*f8a1b7d9SAlexander Kabaev inline long double 782*f8a1b7d9SAlexander Kabaev nexttoward(long double __x, long double __y) 783*f8a1b7d9SAlexander Kabaev { return __builtin_nexttowardl(__x, __y); } 784*f8a1b7d9SAlexander Kabaev 785*f8a1b7d9SAlexander Kabaev template<typename _Tp> 786*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 787*f8a1b7d9SAlexander Kabaev nexttoward(_Tp __x, long double __y) 788*f8a1b7d9SAlexander Kabaev { 789*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 790*f8a1b7d9SAlexander Kabaev return nexttoward(__type(__x), __y); 791*f8a1b7d9SAlexander Kabaev } 792*f8a1b7d9SAlexander Kabaev 793*f8a1b7d9SAlexander Kabaev using std::pow; 794*f8a1b7d9SAlexander Kabaev 795*f8a1b7d9SAlexander Kabaev // DR 550. 796*f8a1b7d9SAlexander Kabaev template<typename _Tp, typename _Up> 797*f8a1b7d9SAlexander Kabaev inline typename __promote_2<_Tp, _Up>::__type 798*f8a1b7d9SAlexander Kabaev pow(_Tp __x, _Up __y) 799*f8a1b7d9SAlexander Kabaev { 800*f8a1b7d9SAlexander Kabaev typedef typename __promote_2<_Tp, _Up>::__type __type; 801*f8a1b7d9SAlexander Kabaev return pow(__type(__x), __type(__y)); 802*f8a1b7d9SAlexander Kabaev } 803*f8a1b7d9SAlexander Kabaev 804*f8a1b7d9SAlexander Kabaev inline float 805*f8a1b7d9SAlexander Kabaev remainder(float __x, float __y) 806*f8a1b7d9SAlexander Kabaev { return __builtin_remainderf(__x, __y); } 807*f8a1b7d9SAlexander Kabaev 808*f8a1b7d9SAlexander Kabaev inline long double 809*f8a1b7d9SAlexander Kabaev remainder(long double __x, long double __y) 810*f8a1b7d9SAlexander Kabaev { return __builtin_remainderl(__x, __y); } 811*f8a1b7d9SAlexander Kabaev 812*f8a1b7d9SAlexander Kabaev template<typename _Tp, typename _Up> 813*f8a1b7d9SAlexander Kabaev inline typename __promote_2<_Tp, _Up>::__type 814*f8a1b7d9SAlexander Kabaev remainder(_Tp __x, _Up __y) 815*f8a1b7d9SAlexander Kabaev { 816*f8a1b7d9SAlexander Kabaev typedef typename __promote_2<_Tp, _Up>::__type __type; 817*f8a1b7d9SAlexander Kabaev return remainder(__type(__x), __type(__y)); 818*f8a1b7d9SAlexander Kabaev } 819*f8a1b7d9SAlexander Kabaev 820*f8a1b7d9SAlexander Kabaev inline float 821*f8a1b7d9SAlexander Kabaev remquo(float __x, float __y, int* __pquo) 822*f8a1b7d9SAlexander Kabaev { return __builtin_remquof(__x, __y, __pquo); } 823*f8a1b7d9SAlexander Kabaev 824*f8a1b7d9SAlexander Kabaev inline long double 825*f8a1b7d9SAlexander Kabaev remquo(long double __x, long double __y, int* __pquo) 826*f8a1b7d9SAlexander Kabaev { return __builtin_remquol(__x, __y, __pquo); } 827*f8a1b7d9SAlexander Kabaev 828*f8a1b7d9SAlexander Kabaev template<typename _Tp, typename _Up> 829*f8a1b7d9SAlexander Kabaev inline typename __promote_2<_Tp, _Up>::__type 830*f8a1b7d9SAlexander Kabaev remquo(_Tp __x, _Up __y, int* __pquo) 831*f8a1b7d9SAlexander Kabaev { 832*f8a1b7d9SAlexander Kabaev typedef typename __promote_2<_Tp, _Up>::__type __type; 833*f8a1b7d9SAlexander Kabaev return remquo(__type(__x), __type(__y), __pquo); 834*f8a1b7d9SAlexander Kabaev } 835*f8a1b7d9SAlexander Kabaev 836*f8a1b7d9SAlexander Kabaev inline float 837*f8a1b7d9SAlexander Kabaev rint(float __x) 838*f8a1b7d9SAlexander Kabaev { return __builtin_rintf(__x); } 839*f8a1b7d9SAlexander Kabaev 840*f8a1b7d9SAlexander Kabaev inline long double 841*f8a1b7d9SAlexander Kabaev rint(long double __x) 842*f8a1b7d9SAlexander Kabaev { return __builtin_rintl(__x); } 843*f8a1b7d9SAlexander Kabaev 844*f8a1b7d9SAlexander Kabaev template<typename _Tp> 845*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 846*f8a1b7d9SAlexander Kabaev rint(_Tp __x) 847*f8a1b7d9SAlexander Kabaev { 848*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 849*f8a1b7d9SAlexander Kabaev return rint(__type(__x)); 850*f8a1b7d9SAlexander Kabaev } 851*f8a1b7d9SAlexander Kabaev 852*f8a1b7d9SAlexander Kabaev inline float 853*f8a1b7d9SAlexander Kabaev round(float __x) 854*f8a1b7d9SAlexander Kabaev { return __builtin_roundf(__x); } 855*f8a1b7d9SAlexander Kabaev 856*f8a1b7d9SAlexander Kabaev inline long double 857*f8a1b7d9SAlexander Kabaev round(long double __x) 858*f8a1b7d9SAlexander Kabaev { return __builtin_roundl(__x); } 859*f8a1b7d9SAlexander Kabaev 860*f8a1b7d9SAlexander Kabaev template<typename _Tp> 861*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 862*f8a1b7d9SAlexander Kabaev round(_Tp __x) 863*f8a1b7d9SAlexander Kabaev { 864*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 865*f8a1b7d9SAlexander Kabaev return round(__type(__x)); 866*f8a1b7d9SAlexander Kabaev } 867*f8a1b7d9SAlexander Kabaev 868*f8a1b7d9SAlexander Kabaev inline float 869*f8a1b7d9SAlexander Kabaev scalbln(float __x, long __ex) 870*f8a1b7d9SAlexander Kabaev { return __builtin_scalblnf(__x, __ex); } 871*f8a1b7d9SAlexander Kabaev 872*f8a1b7d9SAlexander Kabaev inline long double 873*f8a1b7d9SAlexander Kabaev scalbln(long double __x, long __ex) 874*f8a1b7d9SAlexander Kabaev { return __builtin_scalblnl(__x, __ex); } 875*f8a1b7d9SAlexander Kabaev 876*f8a1b7d9SAlexander Kabaev template<typename _Tp> 877*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 878*f8a1b7d9SAlexander Kabaev scalbln(_Tp __x, long __ex) 879*f8a1b7d9SAlexander Kabaev { 880*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 881*f8a1b7d9SAlexander Kabaev return scalbln(__type(__x), __ex); 882*f8a1b7d9SAlexander Kabaev } 883*f8a1b7d9SAlexander Kabaev 884*f8a1b7d9SAlexander Kabaev inline float 885*f8a1b7d9SAlexander Kabaev scalbn(float __x, int __ex) 886*f8a1b7d9SAlexander Kabaev { return __builtin_scalbnf(__x, __ex); } 887*f8a1b7d9SAlexander Kabaev 888*f8a1b7d9SAlexander Kabaev inline long double 889*f8a1b7d9SAlexander Kabaev scalbn(long double __x, int __ex) 890*f8a1b7d9SAlexander Kabaev { return __builtin_scalbnl(__x, __ex); } 891*f8a1b7d9SAlexander Kabaev 892*f8a1b7d9SAlexander Kabaev template<typename _Tp> 893*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 894*f8a1b7d9SAlexander Kabaev scalbn(_Tp __x, int __ex) 895*f8a1b7d9SAlexander Kabaev { 896*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 897*f8a1b7d9SAlexander Kabaev return scalbn(__type(__x), __ex); 898*f8a1b7d9SAlexander Kabaev } 899*f8a1b7d9SAlexander Kabaev 900*f8a1b7d9SAlexander Kabaev using std::sin; 901*f8a1b7d9SAlexander Kabaev using std::sinh; 902*f8a1b7d9SAlexander Kabaev using std::sqrt; 903*f8a1b7d9SAlexander Kabaev using std::tan; 904*f8a1b7d9SAlexander Kabaev using std::tanh; 905*f8a1b7d9SAlexander Kabaev 906*f8a1b7d9SAlexander Kabaev inline float 907*f8a1b7d9SAlexander Kabaev tgamma(float __x) 908*f8a1b7d9SAlexander Kabaev { return __builtin_tgammaf(__x); } 909*f8a1b7d9SAlexander Kabaev 910*f8a1b7d9SAlexander Kabaev inline long double 911*f8a1b7d9SAlexander Kabaev tgamma(long double __x) 912*f8a1b7d9SAlexander Kabaev { return __builtin_tgammal(__x); } 913*f8a1b7d9SAlexander Kabaev 914*f8a1b7d9SAlexander Kabaev template<typename _Tp> 915*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 916*f8a1b7d9SAlexander Kabaev tgamma(_Tp __x) 917*f8a1b7d9SAlexander Kabaev { 918*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 919*f8a1b7d9SAlexander Kabaev return tgamma(__type(__x)); 920*f8a1b7d9SAlexander Kabaev } 921*f8a1b7d9SAlexander Kabaev 922*f8a1b7d9SAlexander Kabaev inline float 923*f8a1b7d9SAlexander Kabaev trunc(float __x) 924*f8a1b7d9SAlexander Kabaev { return __builtin_truncf(__x); } 925*f8a1b7d9SAlexander Kabaev 926*f8a1b7d9SAlexander Kabaev inline long double 927*f8a1b7d9SAlexander Kabaev trunc(long double __x) 928*f8a1b7d9SAlexander Kabaev { return __builtin_truncl(__x); } 929*f8a1b7d9SAlexander Kabaev 930*f8a1b7d9SAlexander Kabaev template<typename _Tp> 931*f8a1b7d9SAlexander Kabaev inline typename __promote<_Tp>::__type 932*f8a1b7d9SAlexander Kabaev trunc(_Tp __x) 933*f8a1b7d9SAlexander Kabaev { 934*f8a1b7d9SAlexander Kabaev typedef typename __promote<_Tp>::__type __type; 935*f8a1b7d9SAlexander Kabaev return trunc(__type(__x)); 936*f8a1b7d9SAlexander Kabaev } 937*f8a1b7d9SAlexander Kabaev 938*f8a1b7d9SAlexander Kabaev#endif 939*f8a1b7d9SAlexander Kabaev 940*f8a1b7d9SAlexander Kabaev_GLIBCXX_END_NAMESPACE 941*f8a1b7d9SAlexander Kabaev} 942*f8a1b7d9SAlexander Kabaev 943*f8a1b7d9SAlexander Kabaev#endif 944