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