100db7afdSDavid E. O'Brien /* Stub definitions for libmath subpart of libstdc++. */
200db7afdSDavid E. O'Brien 
31b86b14eSAlexander Kabaev /* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
400db7afdSDavid E. O'Brien 
500db7afdSDavid E. O'Brien    This file is part of the GNU ISO C++ Library.  This library is free
600db7afdSDavid E. O'Brien    software; you can redistribute it and/or modify it under the
700db7afdSDavid E. O'Brien    terms of the GNU General Public License as published by the
800db7afdSDavid E. O'Brien    Free Software Foundation; either version 2, or (at your option)
900db7afdSDavid E. O'Brien    any later version.
1000db7afdSDavid E. O'Brien 
1100db7afdSDavid E. O'Brien    This library is distributed in the hope that it will be useful,
1200db7afdSDavid E. O'Brien    but WITHOUT ANY WARRANTY; without even the implied warranty of
1300db7afdSDavid E. O'Brien    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1400db7afdSDavid E. O'Brien    GNU General Public License for more details.
1500db7afdSDavid E. O'Brien 
1600db7afdSDavid E. O'Brien    You should have received a copy of the GNU General Public License along
1700db7afdSDavid E. O'Brien    with this library; see the file COPYING.  If not, write to the Free
18*f8a1b7d9SAlexander Kabaev    Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
1900db7afdSDavid E. O'Brien    USA.
2000db7afdSDavid E. O'Brien 
2100db7afdSDavid E. O'Brien    As a special exception, you may use this file as part of a free software
2200db7afdSDavid E. O'Brien    library without restriction.  Specifically, if other files instantiate
2300db7afdSDavid E. O'Brien    templates or use macros or inline functions from this file, or you compile
2400db7afdSDavid E. O'Brien    this file and link it with other files to produce an executable, this
2500db7afdSDavid E. O'Brien    file does not by itself cause the resulting executable to be covered by
2600db7afdSDavid E. O'Brien    the GNU General Public License.  This exception does not however
2700db7afdSDavid E. O'Brien    invalidate any other reasons why the executable file might be covered by
2800db7afdSDavid E. O'Brien    the GNU General Public License.  */
2900db7afdSDavid E. O'Brien 
3000db7afdSDavid E. O'Brien #include <math.h>
3100db7afdSDavid E. O'Brien #include "config.h"
3200db7afdSDavid E. O'Brien 
3300db7afdSDavid E. O'Brien /* For targets which do not have support for long double versions,
3400db7afdSDavid E. O'Brien    we use the crude approximation.  We'll do better later.  */
3500db7afdSDavid E. O'Brien 
3600db7afdSDavid E. O'Brien 
37*f8a1b7d9SAlexander Kabaev #ifndef HAVE_FABSF
38*f8a1b7d9SAlexander Kabaev float
fabsf(float x)39*f8a1b7d9SAlexander Kabaev fabsf(float x)
40*f8a1b7d9SAlexander Kabaev {
41*f8a1b7d9SAlexander Kabaev   return (float) fabs(x);
42*f8a1b7d9SAlexander Kabaev }
43*f8a1b7d9SAlexander Kabaev #endif
44*f8a1b7d9SAlexander Kabaev 
45*f8a1b7d9SAlexander Kabaev #ifndef HAVE_FABSL
46*f8a1b7d9SAlexander Kabaev long double
fabsl(long double x)47*f8a1b7d9SAlexander Kabaev fabsl(long double x)
48*f8a1b7d9SAlexander Kabaev {
49*f8a1b7d9SAlexander Kabaev   return fabs((double) x);
50*f8a1b7d9SAlexander Kabaev }
51*f8a1b7d9SAlexander Kabaev #endif
52*f8a1b7d9SAlexander Kabaev 
53*f8a1b7d9SAlexander Kabaev 
54ffeaf689SAlexander Kabaev #ifndef HAVE_ACOSF
55ffeaf689SAlexander Kabaev float
acosf(float x)56ffeaf689SAlexander Kabaev acosf(float x)
57ffeaf689SAlexander Kabaev {
58ffeaf689SAlexander Kabaev   return (float) acos(x);
59ffeaf689SAlexander Kabaev }
60ffeaf689SAlexander Kabaev #endif
61ffeaf689SAlexander Kabaev 
62ffeaf689SAlexander Kabaev #ifndef HAVE_ACOSL
63ffeaf689SAlexander Kabaev long double
acosl(long double x)64ffeaf689SAlexander Kabaev acosl(long double x)
65ffeaf689SAlexander Kabaev {
66ffeaf689SAlexander Kabaev   return acos((double) x);
67ffeaf689SAlexander Kabaev }
68ffeaf689SAlexander Kabaev #endif
69ffeaf689SAlexander Kabaev 
70ffeaf689SAlexander Kabaev 
71ffeaf689SAlexander Kabaev #ifndef HAVE_ASINF
72ffeaf689SAlexander Kabaev float
asinf(float x)73ffeaf689SAlexander Kabaev asinf(float x)
74ffeaf689SAlexander Kabaev {
75ffeaf689SAlexander Kabaev   return (float) asin(x);
76ffeaf689SAlexander Kabaev }
77ffeaf689SAlexander Kabaev #endif
78ffeaf689SAlexander Kabaev 
79ffeaf689SAlexander Kabaev #ifndef HAVE_ASINL
80ffeaf689SAlexander Kabaev long double
asinl(long double x)81ffeaf689SAlexander Kabaev asinl(long double x)
82ffeaf689SAlexander Kabaev {
83ffeaf689SAlexander Kabaev   return asin((double) x);
84ffeaf689SAlexander Kabaev }
85ffeaf689SAlexander Kabaev #endif
86ffeaf689SAlexander Kabaev 
87ffeaf689SAlexander Kabaev 
88ffeaf689SAlexander Kabaev #ifndef HAVE_ATANF
89ffeaf689SAlexander Kabaev float
atanf(float x)90ffeaf689SAlexander Kabaev atanf(float x)
91ffeaf689SAlexander Kabaev {
92ffeaf689SAlexander Kabaev   return (float) atan(x);
93ffeaf689SAlexander Kabaev }
94ffeaf689SAlexander Kabaev #endif
95ffeaf689SAlexander Kabaev 
96ffeaf689SAlexander Kabaev #ifndef HAVE_ATANL
97ffeaf689SAlexander Kabaev long double
atanl(long double x)98ffeaf689SAlexander Kabaev atanl(long double x)
99ffeaf689SAlexander Kabaev {
100ffeaf689SAlexander Kabaev   return atan ((double) x);
101ffeaf689SAlexander Kabaev }
102ffeaf689SAlexander Kabaev #endif
103ffeaf689SAlexander Kabaev 
104ffeaf689SAlexander Kabaev 
10500db7afdSDavid E. O'Brien #ifndef HAVE_ATAN2F
10600db7afdSDavid E. O'Brien float
atan2f(float x,float y)10700db7afdSDavid E. O'Brien atan2f(float x, float y)
10800db7afdSDavid E. O'Brien {
10900db7afdSDavid E. O'Brien   return (float) atan2(x, y);
11000db7afdSDavid E. O'Brien }
11100db7afdSDavid E. O'Brien #endif
11200db7afdSDavid E. O'Brien 
11300db7afdSDavid E. O'Brien #ifndef HAVE_ATAN2L
11400db7afdSDavid E. O'Brien long double
atan2l(long double x,long double y)11500db7afdSDavid E. O'Brien atan2l(long double x, long double y)
11600db7afdSDavid E. O'Brien {
11700db7afdSDavid E. O'Brien   return atan2((double) x, (double) y);
11800db7afdSDavid E. O'Brien }
11900db7afdSDavid E. O'Brien #endif
12000db7afdSDavid E. O'Brien 
12100db7afdSDavid E. O'Brien 
122ffeaf689SAlexander Kabaev #ifndef HAVE_CEILF
123ffeaf689SAlexander Kabaev float
ceilf(float x)124ffeaf689SAlexander Kabaev ceilf(float x)
125ffeaf689SAlexander Kabaev {
126ffeaf689SAlexander Kabaev   return (float) ceil(x);
127ffeaf689SAlexander Kabaev }
128ffeaf689SAlexander Kabaev #endif
129ffeaf689SAlexander Kabaev 
130ffeaf689SAlexander Kabaev #ifndef HAVE_CEILL
131ffeaf689SAlexander Kabaev long double
ceill(long double x)132ffeaf689SAlexander Kabaev ceill(long double x)
133ffeaf689SAlexander Kabaev {
134ffeaf689SAlexander Kabaev   return ceil((double) x);
135ffeaf689SAlexander Kabaev }
136ffeaf689SAlexander Kabaev #endif
137ffeaf689SAlexander Kabaev 
138ffeaf689SAlexander Kabaev 
13900db7afdSDavid E. O'Brien #ifndef HAVE_COSF
14000db7afdSDavid E. O'Brien float
cosf(float x)14100db7afdSDavid E. O'Brien cosf(float x)
14200db7afdSDavid E. O'Brien {
14300db7afdSDavid E. O'Brien   return (float) cos(x);
14400db7afdSDavid E. O'Brien }
14500db7afdSDavid E. O'Brien #endif
14600db7afdSDavid E. O'Brien 
14700db7afdSDavid E. O'Brien #ifndef HAVE_COSL
14800db7afdSDavid E. O'Brien long double
cosl(long double x)14900db7afdSDavid E. O'Brien cosl(long double x)
15000db7afdSDavid E. O'Brien {
15100db7afdSDavid E. O'Brien   return cos((double) x);
15200db7afdSDavid E. O'Brien }
15300db7afdSDavid E. O'Brien #endif
15400db7afdSDavid E. O'Brien 
15500db7afdSDavid E. O'Brien 
15600db7afdSDavid E. O'Brien #ifndef HAVE_COSHF
15700db7afdSDavid E. O'Brien float
coshf(float x)15800db7afdSDavid E. O'Brien coshf(float x)
15900db7afdSDavid E. O'Brien {
16000db7afdSDavid E. O'Brien   return (float) cosh(x);
16100db7afdSDavid E. O'Brien }
16200db7afdSDavid E. O'Brien #endif
16300db7afdSDavid E. O'Brien 
16400db7afdSDavid E. O'Brien #ifndef HAVE_COSHL
16500db7afdSDavid E. O'Brien long double
coshl(long double x)16600db7afdSDavid E. O'Brien coshl(long double x)
16700db7afdSDavid E. O'Brien {
16800db7afdSDavid E. O'Brien   return cosh((double) x);
16900db7afdSDavid E. O'Brien }
17000db7afdSDavid E. O'Brien #endif
17100db7afdSDavid E. O'Brien 
17200db7afdSDavid E. O'Brien 
17300db7afdSDavid E. O'Brien #ifndef HAVE_EXPF
17400db7afdSDavid E. O'Brien float
expf(float x)17500db7afdSDavid E. O'Brien expf(float x)
17600db7afdSDavid E. O'Brien {
17700db7afdSDavid E. O'Brien   return (float) exp(x);
17800db7afdSDavid E. O'Brien }
17900db7afdSDavid E. O'Brien #endif
18000db7afdSDavid E. O'Brien 
18100db7afdSDavid E. O'Brien #ifndef HAVE_EXPL
18200db7afdSDavid E. O'Brien long double
expl(long double x)18300db7afdSDavid E. O'Brien expl(long double x)
18400db7afdSDavid E. O'Brien {
18500db7afdSDavid E. O'Brien   return exp((double) x);
18600db7afdSDavid E. O'Brien }
18700db7afdSDavid E. O'Brien #endif
18800db7afdSDavid E. O'Brien 
18900db7afdSDavid E. O'Brien 
190ffeaf689SAlexander Kabaev #ifndef HAVE_FLOORF
191ffeaf689SAlexander Kabaev float
floorf(float x)192ffeaf689SAlexander Kabaev floorf(float x)
193ffeaf689SAlexander Kabaev {
194ffeaf689SAlexander Kabaev   return (float) floor(x);
195ffeaf689SAlexander Kabaev }
196ffeaf689SAlexander Kabaev #endif
197ffeaf689SAlexander Kabaev 
198ffeaf689SAlexander Kabaev #ifndef HAVE_FLOORL
199ffeaf689SAlexander Kabaev long double
floorl(long double x)200ffeaf689SAlexander Kabaev floorl(long double x)
201ffeaf689SAlexander Kabaev {
202ffeaf689SAlexander Kabaev   return floor((double) x);
203ffeaf689SAlexander Kabaev }
204ffeaf689SAlexander Kabaev #endif
205ffeaf689SAlexander Kabaev 
206ffeaf689SAlexander Kabaev 
207ffeaf689SAlexander Kabaev #ifndef HAVE_FMODF
208ffeaf689SAlexander Kabaev float
fmodf(float x,float y)209ffeaf689SAlexander Kabaev fmodf(float x, float y)
210ffeaf689SAlexander Kabaev {
211ffeaf689SAlexander Kabaev   return (float) fmod(x, y);
212ffeaf689SAlexander Kabaev }
213ffeaf689SAlexander Kabaev #endif
214ffeaf689SAlexander Kabaev 
215ffeaf689SAlexander Kabaev #ifndef HAVE_FMODL
216ffeaf689SAlexander Kabaev long double
fmodl(long double x,long double y)217ffeaf689SAlexander Kabaev fmodl(long double x, long double y)
218ffeaf689SAlexander Kabaev {
219ffeaf689SAlexander Kabaev   return fmod((double) x, (double) y);
220ffeaf689SAlexander Kabaev }
221ffeaf689SAlexander Kabaev #endif
222ffeaf689SAlexander Kabaev 
223ffeaf689SAlexander Kabaev 
224ffeaf689SAlexander Kabaev #ifndef HAVE_FREXPF
225ffeaf689SAlexander Kabaev float
frexpf(float x,int * exp)226ffeaf689SAlexander Kabaev frexpf(float x, int *exp)
227ffeaf689SAlexander Kabaev {
228ffeaf689SAlexander Kabaev   return (float) frexp(x, exp);
229ffeaf689SAlexander Kabaev }
230ffeaf689SAlexander Kabaev #endif
231ffeaf689SAlexander Kabaev 
232ffeaf689SAlexander Kabaev #ifndef HAVE_FREXPL
233ffeaf689SAlexander Kabaev long double
frexpl(long double x,int * exp)234ffeaf689SAlexander Kabaev frexpl(long double x, int *exp)
235ffeaf689SAlexander Kabaev {
236ffeaf689SAlexander Kabaev   return frexp((double) x, exp);
237ffeaf689SAlexander Kabaev }
238ffeaf689SAlexander Kabaev #endif
239ffeaf689SAlexander Kabaev 
240ffeaf689SAlexander Kabaev 
241ffeaf689SAlexander Kabaev #ifndef HAVE_SQRTF
242ffeaf689SAlexander Kabaev float
sqrtf(float x)243ffeaf689SAlexander Kabaev sqrtf(float x)
244ffeaf689SAlexander Kabaev {
245ffeaf689SAlexander Kabaev   return (float) sqrt(x);
246ffeaf689SAlexander Kabaev }
247ffeaf689SAlexander Kabaev #endif
248ffeaf689SAlexander Kabaev 
249ffeaf689SAlexander Kabaev #ifndef HAVE_SQRTL
250ffeaf689SAlexander Kabaev long double
sqrtl(long double x)251ffeaf689SAlexander Kabaev sqrtl(long double x)
252ffeaf689SAlexander Kabaev {
253ffeaf689SAlexander Kabaev   return  sqrt((double) x);
254ffeaf689SAlexander Kabaev }
255ffeaf689SAlexander Kabaev #endif
256ffeaf689SAlexander Kabaev 
257ffeaf689SAlexander Kabaev 
25800db7afdSDavid E. O'Brien /* Compute the hypothenuse of a right triangle with side x and y.  */
25900db7afdSDavid E. O'Brien #ifndef HAVE_HYPOTF
26000db7afdSDavid E. O'Brien float
hypotf(float x,float y)26100db7afdSDavid E. O'Brien hypotf(float x, float y)
26200db7afdSDavid E. O'Brien {
26300db7afdSDavid E. O'Brien   float s = fabsf(x) + fabsf(y);
2641b86b14eSAlexander Kabaev   if (s == 0.0F)
2651b86b14eSAlexander Kabaev     return s;
26600db7afdSDavid E. O'Brien   x /= s; y /= s;
26700db7afdSDavid E. O'Brien   return s * sqrtf(x * x + y * y);
26800db7afdSDavid E. O'Brien }
26900db7afdSDavid E. O'Brien #endif
27000db7afdSDavid E. O'Brien 
27100db7afdSDavid E. O'Brien #ifndef HAVE_HYPOT
27200db7afdSDavid E. O'Brien double
hypot(double x,double y)27300db7afdSDavid E. O'Brien hypot(double x, double y)
27400db7afdSDavid E. O'Brien {
27500db7afdSDavid E. O'Brien   double s = fabs(x) + fabs(y);
2761b86b14eSAlexander Kabaev   if (s == 0.0)
2771b86b14eSAlexander Kabaev     return s;
27800db7afdSDavid E. O'Brien   x /= s; y /= s;
27900db7afdSDavid E. O'Brien   return s * sqrt(x * x + y * y);
28000db7afdSDavid E. O'Brien }
28100db7afdSDavid E. O'Brien #endif
28200db7afdSDavid E. O'Brien 
28300db7afdSDavid E. O'Brien #ifndef HAVE_HYPOTL
28400db7afdSDavid E. O'Brien long double
hypotl(long double x,long double y)28500db7afdSDavid E. O'Brien hypotl(long double x, long double y)
28600db7afdSDavid E. O'Brien {
28700db7afdSDavid E. O'Brien   long double s = fabsl(x) + fabsl(y);
2881b86b14eSAlexander Kabaev   if (s == 0.0L)
2891b86b14eSAlexander Kabaev     return s;
29000db7afdSDavid E. O'Brien   x /= s; y /= s;
29100db7afdSDavid E. O'Brien   return s * sqrtl(x * x + y * y);
29200db7afdSDavid E. O'Brien }
29300db7afdSDavid E. O'Brien #endif
29400db7afdSDavid E. O'Brien 
29500db7afdSDavid E. O'Brien 
29600db7afdSDavid E. O'Brien 
297ffeaf689SAlexander Kabaev #ifndef HAVE_LDEXPF
298ffeaf689SAlexander Kabaev float
ldexpf(float x,int exp)299ffeaf689SAlexander Kabaev ldexpf(float x, int exp)
300ffeaf689SAlexander Kabaev {
301ffeaf689SAlexander Kabaev   return (float) ldexp(x, exp);
302ffeaf689SAlexander Kabaev }
303ffeaf689SAlexander Kabaev #endif
304ffeaf689SAlexander Kabaev 
305ffeaf689SAlexander Kabaev #ifndef HAVE_LDEXPL
306ffeaf689SAlexander Kabaev long double
ldexpl(long double x,int exp)307ffeaf689SAlexander Kabaev ldexpl(long double x, int exp)
308ffeaf689SAlexander Kabaev {
309ffeaf689SAlexander Kabaev   return ldexp((double) x, exp);
310ffeaf689SAlexander Kabaev }
311ffeaf689SAlexander Kabaev #endif
312ffeaf689SAlexander Kabaev 
313ffeaf689SAlexander Kabaev 
31400db7afdSDavid E. O'Brien #ifndef HAVE_LOGF
31500db7afdSDavid E. O'Brien float
logf(float x)31600db7afdSDavid E. O'Brien logf(float x)
31700db7afdSDavid E. O'Brien {
31800db7afdSDavid E. O'Brien   return (float) log(x);
31900db7afdSDavid E. O'Brien }
32000db7afdSDavid E. O'Brien #endif
32100db7afdSDavid E. O'Brien 
32200db7afdSDavid E. O'Brien #ifndef HAVE_LOGL
32300db7afdSDavid E. O'Brien long double
logl(long double x)32400db7afdSDavid E. O'Brien logl(long double x)
32500db7afdSDavid E. O'Brien {
32600db7afdSDavid E. O'Brien   return log((double) x);
32700db7afdSDavid E. O'Brien }
32800db7afdSDavid E. O'Brien #endif
32900db7afdSDavid E. O'Brien 
33000db7afdSDavid E. O'Brien 
33100db7afdSDavid E. O'Brien #ifndef HAVE_LOG10F
33200db7afdSDavid E. O'Brien float
log10f(float x)33300db7afdSDavid E. O'Brien log10f(float x)
33400db7afdSDavid E. O'Brien {
33500db7afdSDavid E. O'Brien   return (float) log10(x);
33600db7afdSDavid E. O'Brien }
33700db7afdSDavid E. O'Brien #endif
33800db7afdSDavid E. O'Brien 
33900db7afdSDavid E. O'Brien #ifndef HAVE_LOG10L
34000db7afdSDavid E. O'Brien long double
log10l(long double x)34100db7afdSDavid E. O'Brien log10l(long double x)
34200db7afdSDavid E. O'Brien {
34300db7afdSDavid E. O'Brien   return log10((double) x);
34400db7afdSDavid E. O'Brien }
34500db7afdSDavid E. O'Brien #endif
34600db7afdSDavid E. O'Brien 
34700db7afdSDavid E. O'Brien 
348ffeaf689SAlexander Kabaev #ifndef HAVE_MODFF
349ffeaf689SAlexander Kabaev float
modff(float x,float * iptr)350ffeaf689SAlexander Kabaev modff(float x, float *iptr)
351ffeaf689SAlexander Kabaev {
352ffeaf689SAlexander Kabaev   double result, temp;
353ffeaf689SAlexander Kabaev 
354ffeaf689SAlexander Kabaev   result = modf(x, &temp);
355ffeaf689SAlexander Kabaev   *iptr = (float) temp;
356ffeaf689SAlexander Kabaev   return (float) result;
357ffeaf689SAlexander Kabaev }
358ffeaf689SAlexander Kabaev #endif
359ffeaf689SAlexander Kabaev 
360ffeaf689SAlexander Kabaev #ifndef HAVE_MODFL
361ffeaf689SAlexander Kabaev long double
modfl(long double x,long double * iptr)362ffeaf689SAlexander Kabaev modfl(long double x, long double *iptr)
363ffeaf689SAlexander Kabaev {
364ffeaf689SAlexander Kabaev   double result, temp;
365ffeaf689SAlexander Kabaev 
366ffeaf689SAlexander Kabaev   result = modf((double) x, &temp);
367ffeaf689SAlexander Kabaev   *iptr = temp;
368ffeaf689SAlexander Kabaev   return result;
369ffeaf689SAlexander Kabaev }
370ffeaf689SAlexander Kabaev #endif
371ffeaf689SAlexander Kabaev 
372ffeaf689SAlexander Kabaev 
37300db7afdSDavid E. O'Brien #ifndef HAVE_POWF
37400db7afdSDavid E. O'Brien float
powf(float x,float y)37500db7afdSDavid E. O'Brien powf(float x, float y)
37600db7afdSDavid E. O'Brien {
37700db7afdSDavid E. O'Brien   return (float) pow(x, y);
37800db7afdSDavid E. O'Brien }
37900db7afdSDavid E. O'Brien #endif
38000db7afdSDavid E. O'Brien 
38100db7afdSDavid E. O'Brien #ifndef HAVE_POWL
38200db7afdSDavid E. O'Brien long double
powl(long double x,long double y)38300db7afdSDavid E. O'Brien powl(long double x, long double y)
38400db7afdSDavid E. O'Brien {
38500db7afdSDavid E. O'Brien   return pow((double) x, (double) y);
38600db7afdSDavid E. O'Brien }
38700db7afdSDavid E. O'Brien #endif
38800db7afdSDavid E. O'Brien 
38900db7afdSDavid E. O'Brien 
39000db7afdSDavid E. O'Brien #ifndef HAVE_SINF
39100db7afdSDavid E. O'Brien float
sinf(float x)39200db7afdSDavid E. O'Brien sinf(float x)
39300db7afdSDavid E. O'Brien {
39400db7afdSDavid E. O'Brien   return (float) sin(x);
39500db7afdSDavid E. O'Brien }
39600db7afdSDavid E. O'Brien #endif
39700db7afdSDavid E. O'Brien 
39800db7afdSDavid E. O'Brien #ifndef HAVE_SINL
39900db7afdSDavid E. O'Brien long double
sinl(long double x)40000db7afdSDavid E. O'Brien sinl(long double x)
40100db7afdSDavid E. O'Brien {
40200db7afdSDavid E. O'Brien   return sin((double) x);
40300db7afdSDavid E. O'Brien }
40400db7afdSDavid E. O'Brien #endif
40500db7afdSDavid E. O'Brien 
40600db7afdSDavid E. O'Brien 
40700db7afdSDavid E. O'Brien #ifndef HAVE_SINHF
40800db7afdSDavid E. O'Brien float
sinhf(float x)40900db7afdSDavid E. O'Brien sinhf(float x)
41000db7afdSDavid E. O'Brien {
41100db7afdSDavid E. O'Brien   return (float) sinh(x);
41200db7afdSDavid E. O'Brien }
41300db7afdSDavid E. O'Brien #endif
41400db7afdSDavid E. O'Brien 
41500db7afdSDavid E. O'Brien #ifndef HAVE_SINHL
41600db7afdSDavid E. O'Brien long double
sinhl(long double x)41700db7afdSDavid E. O'Brien sinhl(long double x)
41800db7afdSDavid E. O'Brien {
41900db7afdSDavid E. O'Brien   return sinh((double) x);
42000db7afdSDavid E. O'Brien }
42100db7afdSDavid E. O'Brien #endif
42200db7afdSDavid E. O'Brien 
42300db7afdSDavid E. O'Brien 
42400db7afdSDavid E. O'Brien #ifndef HAVE_TANF
42500db7afdSDavid E. O'Brien float
tanf(float x)42600db7afdSDavid E. O'Brien tanf(float x)
42700db7afdSDavid E. O'Brien {
42800db7afdSDavid E. O'Brien   return (float) tan(x);
42900db7afdSDavid E. O'Brien }
43000db7afdSDavid E. O'Brien #endif
43100db7afdSDavid E. O'Brien 
43200db7afdSDavid E. O'Brien #ifndef HAVE_TANL
43300db7afdSDavid E. O'Brien long double
tanl(long double x)43400db7afdSDavid E. O'Brien tanl(long double x)
43500db7afdSDavid E. O'Brien {
43600db7afdSDavid E. O'Brien   return tan((double) x);
43700db7afdSDavid E. O'Brien }
43800db7afdSDavid E. O'Brien #endif
43900db7afdSDavid E. O'Brien 
44000db7afdSDavid E. O'Brien 
44100db7afdSDavid E. O'Brien #ifndef HAVE_TANHF
44200db7afdSDavid E. O'Brien float
tanhf(float x)44300db7afdSDavid E. O'Brien tanhf(float x)
44400db7afdSDavid E. O'Brien {
44500db7afdSDavid E. O'Brien   return (float) tanh(x);
44600db7afdSDavid E. O'Brien }
44700db7afdSDavid E. O'Brien #endif
44800db7afdSDavid E. O'Brien 
44900db7afdSDavid E. O'Brien #ifndef HAVE_TANHL
45000db7afdSDavid E. O'Brien long double
tanhl(long double x)45100db7afdSDavid E. O'Brien tanhl(long double x)
45200db7afdSDavid E. O'Brien {
45300db7afdSDavid E. O'Brien   return tanh((double) x);
45400db7afdSDavid E. O'Brien }
45500db7afdSDavid E. O'Brien #endif
456