1 // Stub definitions for float math. 2 3 // Copyright (C) 2001-2019 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 #include <cmath> 26 27 // For targets which do not have support for float versions, 28 // we use the following crude approximations. We keep saying that we'll do 29 // better later, but never do. 30 31 extern "C" 32 { 33 #ifndef _GLIBCXX_HAVE_FABSF 34 float fabsf(float x)35 fabsf(float x) 36 { 37 return (float) fabs(x); 38 } 39 #endif 40 41 #ifndef _GLIBCXX_HAVE_ACOSF 42 float acosf(float x)43 acosf(float x) 44 { 45 return (float) acos(x); 46 } 47 #endif 48 49 #ifndef _GLIBCXX_HAVE_ASINF 50 float asinf(float x)51 asinf(float x) 52 { 53 return (float) asin(x); 54 } 55 #endif 56 57 #ifndef _GLIBCXX_HAVE_ATANF 58 float atanf(float x)59 atanf(float x) 60 { 61 return (float) atan(x); 62 } 63 #endif 64 65 #ifndef _GLIBCXX_HAVE_ATAN2F 66 float atan2f(float x,float y)67 atan2f(float x, float y) 68 { 69 return (float) atan2(x, y); 70 } 71 #endif 72 73 #ifndef _GLIBCXX_HAVE_CEILF 74 float ceilf(float x)75 ceilf(float x) 76 { 77 return (float) ceil(x); 78 } 79 #endif 80 81 #ifndef _GLIBCXX_HAVE_COSF 82 float cosf(float x)83 cosf(float x) 84 { 85 return (float) cos(x); 86 } 87 #endif 88 89 #ifndef _GLIBCXX_HAVE_COSHF 90 float coshf(float x)91 coshf(float x) 92 { 93 return (float) cosh(x); 94 } 95 #endif 96 97 #ifndef _GLIBCXX_HAVE_EXPF 98 float expf(float x)99 expf(float x) 100 { 101 return (float) exp(x); 102 } 103 #endif 104 105 #ifndef _GLIBCXX_HAVE_FLOORF 106 float floorf(float x)107 floorf(float x) 108 { 109 return (float) floor(x); 110 } 111 #endif 112 113 #ifndef _GLIBCXX_HAVE_FMODF 114 float fmodf(float x,float y)115 fmodf(float x, float y) 116 { 117 return (float) fmod(x, y); 118 } 119 #endif 120 121 #ifndef _GLIBCXX_HAVE_FREXPF 122 float frexpf(float x,int * exp)123 frexpf(float x, int *exp) 124 { 125 return (float) frexp(x, exp); 126 } 127 #endif 128 129 #ifndef _GLIBCXX_HAVE_SQRTF 130 float sqrtf(float x)131 sqrtf(float x) 132 { 133 return (float) sqrt(x); 134 } 135 #endif 136 137 #ifndef _GLIBCXX_HAVE_HYPOTF 138 float hypotf(float x,float y)139 hypotf(float x, float y) 140 { 141 float s = fabsf(x) + fabsf(y); 142 if (s == 0.0F) 143 return s; 144 x /= s; y /= s; 145 return s * sqrtf(x * x + y * y); 146 } 147 #endif 148 149 #ifndef _GLIBCXX_HAVE_LDEXPF 150 float ldexpf(float x,int exp)151 ldexpf(float x, int exp) 152 { 153 return (float) ldexp(x, exp); 154 } 155 #endif 156 157 #ifndef _GLIBCXX_HAVE_LOGF 158 float logf(float x)159 logf(float x) 160 { 161 return (float) log(x); 162 } 163 #endif 164 165 #ifndef _GLIBCXX_HAVE_LOG10F 166 float log10f(float x)167 log10f(float x) 168 { 169 return (float) log10(x); 170 } 171 #endif 172 173 #ifndef _GLIBCXX_HAVE_MODFF 174 float modff(float x,float * iptr)175 modff(float x, float *iptr) 176 { 177 double result, temp; 178 179 result = modf(x, &temp); 180 *iptr = (float) temp; 181 return (float) result; 182 } 183 #endif 184 185 #ifndef _GLIBCXX_HAVE_POWF 186 float powf(float x,float y)187 powf(float x, float y) 188 { 189 return (float) pow(x, y); 190 } 191 #endif 192 193 #ifndef _GLIBCXX_HAVE_SINF 194 float sinf(float x)195 sinf(float x) 196 { 197 return (float) sin(x); 198 } 199 #endif 200 201 #ifndef _GLIBCXX_HAVE_SINHF 202 float sinhf(float x)203 sinhf(float x) 204 { 205 return (float) sinh(x); 206 } 207 #endif 208 209 #ifndef _GLIBCXX_HAVE_TANF 210 float tanf(float x)211 tanf(float x) 212 { 213 return (float) tan(x); 214 } 215 #endif 216 217 #ifndef _GLIBCXX_HAVE_TANHF 218 float tanhf(float x)219 tanhf(float x) 220 { 221 return (float) tanh(x); 222 } 223 #endif 224 } // extern "C" 225