1// Stub definitions for long double math. 2 3// Copyright (C) 2001, 2002, 2003, 2009 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 31extern "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