1*e4b17023SJohn Marino // Stub definitions for float math. 2*e4b17023SJohn Marino 3*e4b17023SJohn Marino // Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc. 4*e4b17023SJohn Marino // 5*e4b17023SJohn Marino // This file is part of the GNU ISO C++ Library. This library is free 6*e4b17023SJohn Marino // software; you can redistribute it and/or modify it under the 7*e4b17023SJohn Marino // terms of the GNU General Public License as published by the 8*e4b17023SJohn Marino // Free Software Foundation; either version 3, or (at your option) 9*e4b17023SJohn Marino // any later version. 10*e4b17023SJohn Marino 11*e4b17023SJohn Marino // This library is distributed in the hope that it will be useful, 12*e4b17023SJohn Marino // but WITHOUT ANY WARRANTY; without even the implied warranty of 13*e4b17023SJohn Marino // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*e4b17023SJohn Marino // GNU General Public License for more details. 15*e4b17023SJohn Marino 16*e4b17023SJohn Marino // Under Section 7 of GPL version 3, you are granted additional 17*e4b17023SJohn Marino // permissions described in the GCC Runtime Library Exception, version 18*e4b17023SJohn Marino // 3.1, as published by the Free Software Foundation. 19*e4b17023SJohn Marino 20*e4b17023SJohn Marino // You should have received a copy of the GNU General Public License and 21*e4b17023SJohn Marino // a copy of the GCC Runtime Library Exception along with this program; 22*e4b17023SJohn Marino // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23*e4b17023SJohn Marino // <http://www.gnu.org/licenses/>. 24*e4b17023SJohn Marino 25*e4b17023SJohn Marino #include <cmath> 26*e4b17023SJohn Marino 27*e4b17023SJohn Marino // For targets which do not have support for float versions, 28*e4b17023SJohn Marino // we use the following crude approximations. We keep saying that we'll do 29*e4b17023SJohn Marino // better later, but never do. 30*e4b17023SJohn Marino 31*e4b17023SJohn Marino extern "C" 32*e4b17023SJohn Marino { 33*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_FABSF 34*e4b17023SJohn Marino float fabsf(float x)35*e4b17023SJohn Marino fabsf(float x) 36*e4b17023SJohn Marino { 37*e4b17023SJohn Marino return (float) fabs(x); 38*e4b17023SJohn Marino } 39*e4b17023SJohn Marino #endif 40*e4b17023SJohn Marino 41*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_ACOSF 42*e4b17023SJohn Marino float acosf(float x)43*e4b17023SJohn Marino acosf(float x) 44*e4b17023SJohn Marino { 45*e4b17023SJohn Marino return (float) acos(x); 46*e4b17023SJohn Marino } 47*e4b17023SJohn Marino #endif 48*e4b17023SJohn Marino 49*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_ASINF 50*e4b17023SJohn Marino float asinf(float x)51*e4b17023SJohn Marino asinf(float x) 52*e4b17023SJohn Marino { 53*e4b17023SJohn Marino return (float) asin(x); 54*e4b17023SJohn Marino } 55*e4b17023SJohn Marino #endif 56*e4b17023SJohn Marino 57*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_ATANF 58*e4b17023SJohn Marino float atanf(float x)59*e4b17023SJohn Marino atanf(float x) 60*e4b17023SJohn Marino { 61*e4b17023SJohn Marino return (float) atan(x); 62*e4b17023SJohn Marino } 63*e4b17023SJohn Marino #endif 64*e4b17023SJohn Marino 65*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_ATAN2F 66*e4b17023SJohn Marino float atan2f(float x,float y)67*e4b17023SJohn Marino atan2f(float x, float y) 68*e4b17023SJohn Marino { 69*e4b17023SJohn Marino return (float) atan2(x, y); 70*e4b17023SJohn Marino } 71*e4b17023SJohn Marino #endif 72*e4b17023SJohn Marino 73*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_CEILF 74*e4b17023SJohn Marino float ceilf(float x)75*e4b17023SJohn Marino ceilf(float x) 76*e4b17023SJohn Marino { 77*e4b17023SJohn Marino return (float) ceil(x); 78*e4b17023SJohn Marino } 79*e4b17023SJohn Marino #endif 80*e4b17023SJohn Marino 81*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_COSF 82*e4b17023SJohn Marino float cosf(float x)83*e4b17023SJohn Marino cosf(float x) 84*e4b17023SJohn Marino { 85*e4b17023SJohn Marino return (float) cos(x); 86*e4b17023SJohn Marino } 87*e4b17023SJohn Marino #endif 88*e4b17023SJohn Marino 89*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_COSHF 90*e4b17023SJohn Marino float coshf(float x)91*e4b17023SJohn Marino coshf(float x) 92*e4b17023SJohn Marino { 93*e4b17023SJohn Marino return (float) cosh(x); 94*e4b17023SJohn Marino } 95*e4b17023SJohn Marino #endif 96*e4b17023SJohn Marino 97*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_EXPF 98*e4b17023SJohn Marino float expf(float x)99*e4b17023SJohn Marino expf(float x) 100*e4b17023SJohn Marino { 101*e4b17023SJohn Marino return (float) exp(x); 102*e4b17023SJohn Marino } 103*e4b17023SJohn Marino #endif 104*e4b17023SJohn Marino 105*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_FLOORF 106*e4b17023SJohn Marino float floorf(float x)107*e4b17023SJohn Marino floorf(float x) 108*e4b17023SJohn Marino { 109*e4b17023SJohn Marino return (float) floor(x); 110*e4b17023SJohn Marino } 111*e4b17023SJohn Marino #endif 112*e4b17023SJohn Marino 113*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_FMODF 114*e4b17023SJohn Marino float fmodf(float x,float y)115*e4b17023SJohn Marino fmodf(float x, float y) 116*e4b17023SJohn Marino { 117*e4b17023SJohn Marino return (float) fmod(x, y); 118*e4b17023SJohn Marino } 119*e4b17023SJohn Marino #endif 120*e4b17023SJohn Marino 121*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_FREXPF 122*e4b17023SJohn Marino float frexpf(float x,int * exp)123*e4b17023SJohn Marino frexpf(float x, int *exp) 124*e4b17023SJohn Marino { 125*e4b17023SJohn Marino return (float) frexp(x, exp); 126*e4b17023SJohn Marino } 127*e4b17023SJohn Marino #endif 128*e4b17023SJohn Marino 129*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_SQRTF 130*e4b17023SJohn Marino float sqrtf(float x)131*e4b17023SJohn Marino sqrtf(float x) 132*e4b17023SJohn Marino { 133*e4b17023SJohn Marino return (float) sqrt(x); 134*e4b17023SJohn Marino } 135*e4b17023SJohn Marino #endif 136*e4b17023SJohn Marino 137*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_HYPOTF 138*e4b17023SJohn Marino float hypotf(float x,float y)139*e4b17023SJohn Marino hypotf(float x, float y) 140*e4b17023SJohn Marino { 141*e4b17023SJohn Marino float s = fabsf(x) + fabsf(y); 142*e4b17023SJohn Marino if (s == 0.0F) 143*e4b17023SJohn Marino return s; 144*e4b17023SJohn Marino x /= s; y /= s; 145*e4b17023SJohn Marino return s * sqrtf(x * x + y * y); 146*e4b17023SJohn Marino } 147*e4b17023SJohn Marino #endif 148*e4b17023SJohn Marino 149*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_LDEXPF 150*e4b17023SJohn Marino float ldexpf(float x,int exp)151*e4b17023SJohn Marino ldexpf(float x, int exp) 152*e4b17023SJohn Marino { 153*e4b17023SJohn Marino return (float) ldexp(x, exp); 154*e4b17023SJohn Marino } 155*e4b17023SJohn Marino #endif 156*e4b17023SJohn Marino 157*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_LOGF 158*e4b17023SJohn Marino float logf(float x)159*e4b17023SJohn Marino logf(float x) 160*e4b17023SJohn Marino { 161*e4b17023SJohn Marino return (float) log(x); 162*e4b17023SJohn Marino } 163*e4b17023SJohn Marino #endif 164*e4b17023SJohn Marino 165*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_LOG10F 166*e4b17023SJohn Marino float log10f(float x)167*e4b17023SJohn Marino log10f(float x) 168*e4b17023SJohn Marino { 169*e4b17023SJohn Marino return (float) log10(x); 170*e4b17023SJohn Marino } 171*e4b17023SJohn Marino #endif 172*e4b17023SJohn Marino 173*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_MODFF 174*e4b17023SJohn Marino float modff(float x,float * iptr)175*e4b17023SJohn Marino modff(float x, float *iptr) 176*e4b17023SJohn Marino { 177*e4b17023SJohn Marino double result, temp; 178*e4b17023SJohn Marino 179*e4b17023SJohn Marino result = modf(x, &temp); 180*e4b17023SJohn Marino *iptr = (float) temp; 181*e4b17023SJohn Marino return (float) result; 182*e4b17023SJohn Marino } 183*e4b17023SJohn Marino #endif 184*e4b17023SJohn Marino 185*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_POWF 186*e4b17023SJohn Marino float powf(float x,float y)187*e4b17023SJohn Marino powf(float x, float y) 188*e4b17023SJohn Marino { 189*e4b17023SJohn Marino return (float) pow(x, y); 190*e4b17023SJohn Marino } 191*e4b17023SJohn Marino #endif 192*e4b17023SJohn Marino 193*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_SINF 194*e4b17023SJohn Marino float sinf(float x)195*e4b17023SJohn Marino sinf(float x) 196*e4b17023SJohn Marino { 197*e4b17023SJohn Marino return (float) sin(x); 198*e4b17023SJohn Marino } 199*e4b17023SJohn Marino #endif 200*e4b17023SJohn Marino 201*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_SINHF 202*e4b17023SJohn Marino float sinhf(float x)203*e4b17023SJohn Marino sinhf(float x) 204*e4b17023SJohn Marino { 205*e4b17023SJohn Marino return (float) sinh(x); 206*e4b17023SJohn Marino } 207*e4b17023SJohn Marino #endif 208*e4b17023SJohn Marino 209*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_TANF 210*e4b17023SJohn Marino float tanf(float x)211*e4b17023SJohn Marino tanf(float x) 212*e4b17023SJohn Marino { 213*e4b17023SJohn Marino return (float) tan(x); 214*e4b17023SJohn Marino } 215*e4b17023SJohn Marino #endif 216*e4b17023SJohn Marino 217*e4b17023SJohn Marino #ifndef _GLIBCXX_HAVE_TANHF 218*e4b17023SJohn Marino float tanhf(float x)219*e4b17023SJohn Marino tanhf(float x) 220*e4b17023SJohn Marino { 221*e4b17023SJohn Marino return (float) tanh(x); 222*e4b17023SJohn Marino } 223*e4b17023SJohn Marino #endif 224*e4b17023SJohn Marino } // extern "C" 225