1 // Stub definitions for long double math. 2 3 // Copyright (C) 2001-2018 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 long double 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_FABSL 34 long double 35 fabsl(long double x) 36 { 37 return fabs((double) x); 38 } 39 #endif 40 41 #ifndef _GLIBCXX_HAVE_ACOSL 42 long double 43 acosl(long double x) 44 { 45 return acos((double) x); 46 } 47 #endif 48 49 #ifndef _GLIBCXX_HAVE_ASINL 50 long double 51 asinl(long double x) 52 { 53 return asin((double) x); 54 } 55 #endif 56 57 #ifndef _GLIBCXX_HAVE_ATANL 58 long double 59 atanl(long double x) 60 { 61 return atan ((double) x); 62 } 63 #endif 64 65 #ifndef _GLIBCXX_HAVE_ATAN2L 66 long double 67 atan2l(long double x, long double y) 68 { 69 return atan2((double) x, (double) y); 70 } 71 #endif 72 73 #ifndef _GLIBCXX_HAVE_CEILL 74 long double 75 ceill(long double x) 76 { 77 return ceil((double) x); 78 } 79 #endif 80 81 #ifndef _GLIBCXX_HAVE_COSL 82 long double 83 cosl(long double x) 84 { 85 return cos((double) x); 86 } 87 #endif 88 89 #ifndef _GLIBCXX_HAVE_COSHL 90 long double 91 coshl(long double x) 92 { 93 return cosh((double) x); 94 } 95 #endif 96 97 #ifndef _GLIBCXX_HAVE_EXPL 98 long double 99 expl(long double x) 100 { 101 return exp((double) x); 102 } 103 #endif 104 105 #ifndef _GLIBCXX_HAVE_FLOORL 106 long double 107 floorl(long double x) 108 { 109 return floor((double) x); 110 } 111 #endif 112 113 #ifndef _GLIBCXX_HAVE_FMODL 114 long double 115 fmodl(long double x, long double y) 116 { 117 return fmod((double) x, (double) y); 118 } 119 #endif 120 121 #ifndef _GLIBCXX_HAVE_FREXPL 122 long double 123 frexpl(long double x, int *exp) 124 { 125 return frexp((double) x, exp); 126 } 127 #endif 128 129 #ifndef _GLIBCXX_HAVE_SQRTL 130 long double 131 sqrtl(long double x) 132 { 133 return sqrt((double) x); 134 } 135 #endif 136 137 #ifndef _GLIBCXX_HAVE_HYPOTL 138 long double 139 hypotl(long double x, long double y) 140 { 141 long double s = fabsl(x) + fabsl(y); 142 if (s == 0.0L) 143 return s; 144 x /= s; y /= s; 145 return s * sqrtl(x * x + y * y); 146 } 147 #endif 148 149 #ifndef _GLIBCXX_HAVE_LDEXPL 150 long double 151 ldexpl(long double x, int exp) 152 { 153 return ldexp((double) x, exp); 154 } 155 #endif 156 157 #ifndef _GLIBCXX_HAVE_LOGL 158 long double 159 logl(long double x) 160 { 161 return log((double) x); 162 } 163 #endif 164 165 #ifndef _GLIBCXX_HAVE_LOG10L 166 long double 167 log10l(long double x) 168 { 169 return log10((double) x); 170 } 171 #endif 172 173 #ifndef _GLIBCXX_HAVE_MODFL 174 long double 175 modfl(long double x, long double *iptr) 176 { 177 double result, temp; 178 179 result = modf((double) x, &temp); 180 *iptr = temp; 181 return result; 182 } 183 #endif 184 185 #ifndef _GLIBCXX_HAVE_POWL 186 long double 187 powl(long double x, long double y) 188 { 189 return pow((double) x, (double) y); 190 } 191 #endif 192 193 #ifndef _GLIBCXX_HAVE_SINL 194 long double 195 sinl(long double x) 196 { 197 return sin((double) x); 198 } 199 #endif 200 201 #ifndef _GLIBCXX_HAVE_SINHL 202 long double 203 sinhl(long double x) 204 { 205 return sinh((double) x); 206 } 207 #endif 208 209 #ifndef _GLIBCXX_HAVE_TANL 210 long double 211 tanl(long double x) 212 { 213 return tan((double) x); 214 } 215 #endif 216 217 #ifndef _GLIBCXX_HAVE_TANHL 218 long double 219 tanhl(long double x) 220 { 221 return tanh((double) x); 222 } 223 #endif 224 } // extern "C" 225