197403Sobrien// -*- C++ -*- forwarding header. 297403Sobrien 3132720Skan// Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc. 497403Sobrien// 597403Sobrien// This file is part of the GNU ISO C++ Library. This library is free 697403Sobrien// software; you can redistribute it and/or modify it under the 797403Sobrien// terms of the GNU General Public License as published by the 897403Sobrien// Free Software Foundation; either version 2, or (at your option) 997403Sobrien// any later version. 1097403Sobrien 1197403Sobrien// This library is distributed in the hope that it will be useful, 1297403Sobrien// but WITHOUT ANY WARRANTY; without even the implied warranty of 1397403Sobrien// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1497403Sobrien// GNU General Public License for more details. 1597403Sobrien 1697403Sobrien// You should have received a copy of the GNU General Public License along 1797403Sobrien// with this library; see the file COPYING. If not, write to the Free 18169691Skan// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 1997403Sobrien// USA. 2097403Sobrien 2197403Sobrien// As a special exception, you may use this file as part of a free software 2297403Sobrien// library without restriction. Specifically, if other files instantiate 2397403Sobrien// templates or use macros or inline functions from this file, or you compile 2497403Sobrien// this file and link it with other files to produce an executable, this 2597403Sobrien// file does not by itself cause the resulting executable to be covered by 2697403Sobrien// the GNU General Public License. This exception does not however 2797403Sobrien// invalidate any other reasons why the executable file might be covered by 2897403Sobrien// the GNU General Public License. 2997403Sobrien 3097403Sobrien// 3197403Sobrien// ISO C++ 14882: 26.5 C library 3297403Sobrien// 3397403Sobrien 34132720Skan#ifndef _GLIBCXX_CMATH 35132720Skan#define _GLIBCXX_CMATH 1 36132720Skan 3797403Sobrien#pragma GCC system_header 3897403Sobrien 39102782Skan#include <bits/c++config.h> 40102782Skan 4197403Sobrien#include_next <math.h> 4297403Sobrien 43102782Skan// Get rid of those macros defined in <math.h> in lieu of real functions. 44102782Skan#undef abs 45102782Skan#undef div 46102782Skan#undef acos 47102782Skan#undef asin 48102782Skan#undef atan 49102782Skan#undef atan2 50102782Skan#undef ceil 51102782Skan#undef cos 52102782Skan#undef cosh 53102782Skan#undef exp 54102782Skan#undef fabs 55102782Skan#undef floor 56102782Skan#undef fmod 57102782Skan#undef frexp 58102782Skan#undef ldexp 59102782Skan#undef log 60102782Skan#undef log10 61102782Skan#undef modf 62102782Skan#undef pow 63102782Skan#undef sin 64102782Skan#undef sinh 65102782Skan#undef sqrt 66102782Skan#undef tan 67102782Skan#undef tanh 68102782Skan 69102782Skan#undef fpclassify 70102782Skan#undef isfinite 71102782Skan#undef isinf 72102782Skan#undef isnan 73102782Skan#undef isnormal 74102782Skan#undef signbit 75102782Skan#undef isgreater 76102782Skan#undef isgreaterequal 77102782Skan#undef isless 78102782Skan#undef islessequal 79102782Skan#undef islessgreater 80102782Skan#undef isunordered 81102782Skan 82132720Skannamespace std 83102782Skan{ 84102782Skan inline double 85102782Skan abs(double __x) 86102782Skan { return __builtin_fabs(__x); } 87102782Skan 88102782Skan inline float 89102782Skan abs(float __x) 90102782Skan { return __builtin_fabsf(__x); } 91102782Skan 92102782Skan inline long double 93102782Skan abs(long double __x) 94102782Skan { return __builtin_fabsl(__x); } 95102782Skan 96132720Skan#if _GLIBCXX_HAVE_MODFF 97132720Skan inline float 98102782Skan modf(float __x, float* __iptr) { return modff(__x, __iptr); } 99102782Skan#else 100132720Skan inline float 101102782Skan modf(float __x, float* __iptr) 102102782Skan { 103102782Skan double __tmp; 104102782Skan double __res = modf(static_cast<double>(__x), &__tmp); 105102782Skan *__iptr = static_cast<float>(__tmp); 106102782Skan return __res; 107102782Skan } 10897403Sobrien#endif 109102782Skan 110132720Skan#if _GLIBCXX_HAVE_MODFL 111132720Skan inline long double 112102782Skan modf(long double __x, long double* __iptr) { return modfl(__x, __iptr); } 113102782Skan#else 114132720Skan inline long double 115132720Skan modf(long double __x, long double* __iptr) 116132720Skan { 117102782Skan double __tmp; 118102782Skan double __res = modf(static_cast<double>(__x), &__tmp); 119102782Skan * __iptr = static_cast<long double>(__tmp); 120102782Skan return __res; 121102782Skan } 122102782Skan#endif 123102782Skan} 124102782Skan#endif 125