1*404b540aSrobert // -*- C++ -*- forwarding header. 2*404b540aSrobert 3*404b540aSrobert // Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc. 4*404b540aSrobert // 5*404b540aSrobert // This file is part of the GNU ISO C++ Library. This library is free 6*404b540aSrobert // software; you can redistribute it and/or modify it under the 7*404b540aSrobert // terms of the GNU General Public License as published by the 8*404b540aSrobert // Free Software Foundation; either version 2, or (at your option) 9*404b540aSrobert // any later version. 10*404b540aSrobert 11*404b540aSrobert // This library is distributed in the hope that it will be useful, 12*404b540aSrobert // but WITHOUT ANY WARRANTY; without even the implied warranty of 13*404b540aSrobert // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*404b540aSrobert // GNU General Public License for more details. 15*404b540aSrobert 16*404b540aSrobert // You should have received a copy of the GNU General Public License along 17*404b540aSrobert // with this library; see the file COPYING. If not, write to the Free 18*404b540aSrobert // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19*404b540aSrobert // USA. 20*404b540aSrobert 21*404b540aSrobert // As a special exception, you may use this file as part of a free software 22*404b540aSrobert // library without restriction. Specifically, if other files instantiate 23*404b540aSrobert // templates or use macros or inline functions from this file, or you compile 24*404b540aSrobert // this file and link it with other files to produce an executable, this 25*404b540aSrobert // file does not by itself cause the resulting executable to be covered by 26*404b540aSrobert // the GNU General Public License. This exception does not however 27*404b540aSrobert // invalidate any other reasons why the executable file might be covered by 28*404b540aSrobert // the GNU General Public License. 29*404b540aSrobert 30*404b540aSrobert // 31*404b540aSrobert // ISO C++ 14882: 26.5 C library 32*404b540aSrobert // 33*404b540aSrobert 34*404b540aSrobert #ifndef _GLIBCXX_CMATH 35*404b540aSrobert #define _GLIBCXX_CMATH 1 36*404b540aSrobert 37*404b540aSrobert #pragma GCC system_header 38*404b540aSrobert 39*404b540aSrobert #include <bits/c++config.h> 40*404b540aSrobert 41*404b540aSrobert #include_next <math.h> 42*404b540aSrobert 43*404b540aSrobert // Get rid of those macros defined in <math.h> in lieu of real functions. 44*404b540aSrobert #undef abs 45*404b540aSrobert #undef div 46*404b540aSrobert #undef acos 47*404b540aSrobert #undef asin 48*404b540aSrobert #undef atan 49*404b540aSrobert #undef atan2 50*404b540aSrobert #undef ceil 51*404b540aSrobert #undef cos 52*404b540aSrobert #undef cosh 53*404b540aSrobert #undef exp 54*404b540aSrobert #undef fabs 55*404b540aSrobert #undef floor 56*404b540aSrobert #undef fmod 57*404b540aSrobert #undef frexp 58*404b540aSrobert #undef ldexp 59*404b540aSrobert #undef log 60*404b540aSrobert #undef log10 61*404b540aSrobert #undef modf 62*404b540aSrobert #undef pow 63*404b540aSrobert #undef sin 64*404b540aSrobert #undef sinh 65*404b540aSrobert #undef sqrt 66*404b540aSrobert #undef tan 67*404b540aSrobert #undef tanh 68*404b540aSrobert 69*404b540aSrobert #undef fpclassify 70*404b540aSrobert #undef isfinite 71*404b540aSrobert #undef isinf 72*404b540aSrobert #undef isnan 73*404b540aSrobert #undef isnormal 74*404b540aSrobert #undef signbit 75*404b540aSrobert #undef isgreater 76*404b540aSrobert #undef isgreaterequal 77*404b540aSrobert #undef isless 78*404b540aSrobert #undef islessequal 79*404b540aSrobert #undef islessgreater 80*404b540aSrobert #undef isunordered 81*404b540aSrobert 82*404b540aSrobert namespace std 83*404b540aSrobert { 84*404b540aSrobert inline double abs(double __x)85*404b540aSrobert abs(double __x) 86*404b540aSrobert { return __builtin_fabs(__x); } 87*404b540aSrobert 88*404b540aSrobert inline float abs(float __x)89*404b540aSrobert abs(float __x) 90*404b540aSrobert { return __builtin_fabsf(__x); } 91*404b540aSrobert 92*404b540aSrobert inline long double abs(long double __x)93*404b540aSrobert abs(long double __x) 94*404b540aSrobert { return __builtin_fabsl(__x); } 95*404b540aSrobert 96*404b540aSrobert #if _GLIBCXX_HAVE_MODFF 97*404b540aSrobert inline float modf(float __x,float * __iptr)98*404b540aSrobert modf(float __x, float* __iptr) { return modff(__x, __iptr); } 99*404b540aSrobert #else 100*404b540aSrobert inline float modf(float __x,float * __iptr)101*404b540aSrobert modf(float __x, float* __iptr) 102*404b540aSrobert { 103*404b540aSrobert double __tmp; 104*404b540aSrobert double __res = modf(static_cast<double>(__x), &__tmp); 105*404b540aSrobert *__iptr = static_cast<float>(__tmp); 106*404b540aSrobert return __res; 107*404b540aSrobert } 108*404b540aSrobert #endif 109*404b540aSrobert 110*404b540aSrobert #if _GLIBCXX_HAVE_MODFL 111*404b540aSrobert inline long double modf(long double __x,long double * __iptr)112*404b540aSrobert modf(long double __x, long double* __iptr) { return modfl(__x, __iptr); } 113*404b540aSrobert #else 114*404b540aSrobert inline long double modf(long double __x,long double * __iptr)115*404b540aSrobert modf(long double __x, long double* __iptr) 116*404b540aSrobert { 117*404b540aSrobert double __tmp; 118*404b540aSrobert double __res = modf(static_cast<double>(__x), &__tmp); 119*404b540aSrobert * __iptr = static_cast<long double>(__tmp); 120*404b540aSrobert return __res; 121*404b540aSrobert } 122*404b540aSrobert #endif 123*404b540aSrobert } 124*404b540aSrobert #endif 125