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