Home | History | Annotate | Line # | Download | only in c
      1 // -*- C++ -*- forwarding header.
      2 
      3 // Copyright (C) 2000-2024 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 
     77 namespace 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