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