1*03a78d15Sespie /* Stub definitions for libmath subpart of libstdc++. */
2*03a78d15Sespie
3*03a78d15Sespie /* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
4*03a78d15Sespie
5*03a78d15Sespie This file is part of the GNU ISO C++ Library. This library is free
6*03a78d15Sespie software; you can redistribute it and/or modify it under the
7*03a78d15Sespie terms of the GNU General Public License as published by the
8*03a78d15Sespie Free Software Foundation; either version 2, or (at your option)
9*03a78d15Sespie any later version.
10*03a78d15Sespie
11*03a78d15Sespie This library is distributed in the hope that it will be useful,
12*03a78d15Sespie but WITHOUT ANY WARRANTY; without even the implied warranty of
13*03a78d15Sespie MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14*03a78d15Sespie GNU General Public License for more details.
15*03a78d15Sespie
16*03a78d15Sespie You should have received a copy of the GNU General Public License along
17*03a78d15Sespie with this library; see the file COPYING. If not, write to the Free
18*03a78d15Sespie Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19*03a78d15Sespie USA.
20*03a78d15Sespie
21*03a78d15Sespie As a special exception, you may use this file as part of a free software
22*03a78d15Sespie library without restriction. Specifically, if other files instantiate
23*03a78d15Sespie templates or use macros or inline functions from this file, or you compile
24*03a78d15Sespie this file and link it with other files to produce an executable, this
25*03a78d15Sespie file does not by itself cause the resulting executable to be covered by
26*03a78d15Sespie the GNU General Public License. This exception does not however
27*03a78d15Sespie invalidate any other reasons why the executable file might be covered by
28*03a78d15Sespie the GNU General Public License. */
29*03a78d15Sespie
30*03a78d15Sespie #include <math.h>
31*03a78d15Sespie #include "config.h"
32*03a78d15Sespie
33*03a78d15Sespie /* For targets which do not have support for long double versions,
34*03a78d15Sespie we use the crude approximation. We'll do better later. */
35*03a78d15Sespie
36*03a78d15Sespie
37*03a78d15Sespie #ifndef HAVE_ATAN2F
38*03a78d15Sespie float
atan2f(float x,float y)39*03a78d15Sespie atan2f(float x, float y)
40*03a78d15Sespie {
41*03a78d15Sespie return (float) atan2(x, y);
42*03a78d15Sespie }
43*03a78d15Sespie #endif
44*03a78d15Sespie
45*03a78d15Sespie #ifndef HAVE_ATAN2L
46*03a78d15Sespie long double
atan2l(long double x,long double y)47*03a78d15Sespie atan2l(long double x, long double y)
48*03a78d15Sespie {
49*03a78d15Sespie return atan2((double) x, (double) y);
50*03a78d15Sespie }
51*03a78d15Sespie #endif
52*03a78d15Sespie
53*03a78d15Sespie
54*03a78d15Sespie #ifndef HAVE_COSF
55*03a78d15Sespie float
cosf(float x)56*03a78d15Sespie cosf(float x)
57*03a78d15Sespie {
58*03a78d15Sespie return (float) cos(x);
59*03a78d15Sespie }
60*03a78d15Sespie #endif
61*03a78d15Sespie
62*03a78d15Sespie #ifndef HAVE_COSL
63*03a78d15Sespie long double
cosl(long double x)64*03a78d15Sespie cosl(long double x)
65*03a78d15Sespie {
66*03a78d15Sespie return cos((double) x);
67*03a78d15Sespie }
68*03a78d15Sespie #endif
69*03a78d15Sespie
70*03a78d15Sespie
71*03a78d15Sespie #ifndef HAVE_COSHF
72*03a78d15Sespie float
coshf(float x)73*03a78d15Sespie coshf(float x)
74*03a78d15Sespie {
75*03a78d15Sespie return (float) cosh(x);
76*03a78d15Sespie }
77*03a78d15Sespie #endif
78*03a78d15Sespie
79*03a78d15Sespie #ifndef HAVE_COSHL
80*03a78d15Sespie long double
coshl(long double x)81*03a78d15Sespie coshl(long double x)
82*03a78d15Sespie {
83*03a78d15Sespie return cosh((double) x);
84*03a78d15Sespie }
85*03a78d15Sespie #endif
86*03a78d15Sespie
87*03a78d15Sespie
88*03a78d15Sespie #ifndef HAVE_EXPF
89*03a78d15Sespie float
expf(float x)90*03a78d15Sespie expf(float x)
91*03a78d15Sespie {
92*03a78d15Sespie return (float) exp(x);
93*03a78d15Sespie }
94*03a78d15Sespie #endif
95*03a78d15Sespie
96*03a78d15Sespie #ifndef HAVE_EXPL
97*03a78d15Sespie long double
expl(long double x)98*03a78d15Sespie expl(long double x)
99*03a78d15Sespie {
100*03a78d15Sespie return exp((double) x);
101*03a78d15Sespie }
102*03a78d15Sespie #endif
103*03a78d15Sespie
104*03a78d15Sespie
105*03a78d15Sespie /* Compute the hypothenuse of a right triangle with side x and y. */
106*03a78d15Sespie #ifndef HAVE_HYPOTF
107*03a78d15Sespie float
hypotf(float x,float y)108*03a78d15Sespie hypotf(float x, float y)
109*03a78d15Sespie {
110*03a78d15Sespie float s = fabsf(x) + fabsf(y);
111*03a78d15Sespie if (s == 0.0F)
112*03a78d15Sespie return s;
113*03a78d15Sespie x /= s; y /= s;
114*03a78d15Sespie return s * sqrtf(x * x + y * y);
115*03a78d15Sespie }
116*03a78d15Sespie #endif
117*03a78d15Sespie
118*03a78d15Sespie #ifndef HAVE_HYPOT
119*03a78d15Sespie double
hypot(double x,double y)120*03a78d15Sespie hypot(double x, double y)
121*03a78d15Sespie {
122*03a78d15Sespie double s = fabs(x) + fabs(y);
123*03a78d15Sespie if (s == 0.0)
124*03a78d15Sespie return s;
125*03a78d15Sespie x /= s; y /= s;
126*03a78d15Sespie return s * sqrt(x * x + y * y);
127*03a78d15Sespie }
128*03a78d15Sespie #endif
129*03a78d15Sespie
130*03a78d15Sespie #ifndef HAVE_HYPOTL
131*03a78d15Sespie long double
hypotl(long double x,long double y)132*03a78d15Sespie hypotl(long double x, long double y)
133*03a78d15Sespie {
134*03a78d15Sespie long double s = fabsl(x) + fabsl(y);
135*03a78d15Sespie if (s == 0.0L)
136*03a78d15Sespie return s;
137*03a78d15Sespie x /= s; y /= s;
138*03a78d15Sespie return s * sqrtl(x * x + y * y);
139*03a78d15Sespie }
140*03a78d15Sespie #endif
141*03a78d15Sespie
142*03a78d15Sespie
143*03a78d15Sespie
144*03a78d15Sespie #ifndef HAVE_LOGF
145*03a78d15Sespie float
logf(float x)146*03a78d15Sespie logf(float x)
147*03a78d15Sespie {
148*03a78d15Sespie return (float) log(x);
149*03a78d15Sespie }
150*03a78d15Sespie #endif
151*03a78d15Sespie
152*03a78d15Sespie #ifndef HAVE_LOGL
153*03a78d15Sespie long double
logl(long double x)154*03a78d15Sespie logl(long double x)
155*03a78d15Sespie {
156*03a78d15Sespie return log((double) x);
157*03a78d15Sespie }
158*03a78d15Sespie #endif
159*03a78d15Sespie
160*03a78d15Sespie
161*03a78d15Sespie #ifndef HAVE_LOG10F
162*03a78d15Sespie float
log10f(float x)163*03a78d15Sespie log10f(float x)
164*03a78d15Sespie {
165*03a78d15Sespie return (float) log10(x);
166*03a78d15Sespie }
167*03a78d15Sespie #endif
168*03a78d15Sespie
169*03a78d15Sespie #ifndef HAVE_LOG10L
170*03a78d15Sespie long double
log10l(long double x)171*03a78d15Sespie log10l(long double x)
172*03a78d15Sespie {
173*03a78d15Sespie return log10((double) x);
174*03a78d15Sespie }
175*03a78d15Sespie #endif
176*03a78d15Sespie
177*03a78d15Sespie
178*03a78d15Sespie #ifndef HAVE_POWF
179*03a78d15Sespie float
powf(float x,float y)180*03a78d15Sespie powf(float x, float y)
181*03a78d15Sespie {
182*03a78d15Sespie return (float) pow(x, y);
183*03a78d15Sespie }
184*03a78d15Sespie #endif
185*03a78d15Sespie
186*03a78d15Sespie #ifndef HAVE_POWL
187*03a78d15Sespie long double
powl(long double x,long double y)188*03a78d15Sespie powl(long double x, long double y)
189*03a78d15Sespie {
190*03a78d15Sespie return pow((double) x, (double) y);
191*03a78d15Sespie }
192*03a78d15Sespie #endif
193*03a78d15Sespie
194*03a78d15Sespie
195*03a78d15Sespie #ifndef HAVE_SINF
196*03a78d15Sespie float
sinf(float x)197*03a78d15Sespie sinf(float x)
198*03a78d15Sespie {
199*03a78d15Sespie return (float) sin(x);
200*03a78d15Sespie }
201*03a78d15Sespie #endif
202*03a78d15Sespie
203*03a78d15Sespie #ifndef HAVE_SINL
204*03a78d15Sespie long double
sinl(long double x)205*03a78d15Sespie sinl(long double x)
206*03a78d15Sespie {
207*03a78d15Sespie return sin((double) x);
208*03a78d15Sespie }
209*03a78d15Sespie #endif
210*03a78d15Sespie
211*03a78d15Sespie
212*03a78d15Sespie #ifndef HAVE_SINHF
213*03a78d15Sespie float
sinhf(float x)214*03a78d15Sespie sinhf(float x)
215*03a78d15Sespie {
216*03a78d15Sespie return (float) sinh(x);
217*03a78d15Sespie }
218*03a78d15Sespie #endif
219*03a78d15Sespie
220*03a78d15Sespie #ifndef HAVE_SINHL
221*03a78d15Sespie long double
sinhl(long double x)222*03a78d15Sespie sinhl(long double x)
223*03a78d15Sespie {
224*03a78d15Sespie return sinh((double) x);
225*03a78d15Sespie }
226*03a78d15Sespie #endif
227*03a78d15Sespie
228*03a78d15Sespie
229*03a78d15Sespie #ifndef HAVE_SQRTF
230*03a78d15Sespie float
sqrtf(float x)231*03a78d15Sespie sqrtf(float x)
232*03a78d15Sespie {
233*03a78d15Sespie return (float) sqrt(x);
234*03a78d15Sespie }
235*03a78d15Sespie #endif
236*03a78d15Sespie
237*03a78d15Sespie #ifndef HAVE_SQRTL
238*03a78d15Sespie long double
sqrtl(long double x)239*03a78d15Sespie sqrtl(long double x)
240*03a78d15Sespie {
241*03a78d15Sespie return sqrt((double) x);
242*03a78d15Sespie }
243*03a78d15Sespie #endif
244*03a78d15Sespie
245*03a78d15Sespie
246*03a78d15Sespie #ifndef HAVE_TANF
247*03a78d15Sespie float
tanf(float x)248*03a78d15Sespie tanf(float x)
249*03a78d15Sespie {
250*03a78d15Sespie return (float) tan(x);
251*03a78d15Sespie }
252*03a78d15Sespie #endif
253*03a78d15Sespie
254*03a78d15Sespie #ifndef HAVE_TANL
255*03a78d15Sespie long double
tanl(long double x)256*03a78d15Sespie tanl(long double x)
257*03a78d15Sespie {
258*03a78d15Sespie return tan((double) x);
259*03a78d15Sespie }
260*03a78d15Sespie #endif
261*03a78d15Sespie
262*03a78d15Sespie
263*03a78d15Sespie #ifndef HAVE_TANHF
264*03a78d15Sespie float
tanhf(float x)265*03a78d15Sespie tanhf(float x)
266*03a78d15Sespie {
267*03a78d15Sespie return (float) tanh(x);
268*03a78d15Sespie }
269*03a78d15Sespie #endif
270*03a78d15Sespie
271*03a78d15Sespie #ifndef HAVE_TANHL
272*03a78d15Sespie long double
tanhl(long double x)273*03a78d15Sespie tanhl(long double x)
274*03a78d15Sespie {
275*03a78d15Sespie return tanh((double) x);
276*03a78d15Sespie }
277*03a78d15Sespie #endif
278