xref: /openbsd-src/gnu/lib/libstdc++/libstdc++/libmath/stubs.c (revision 03a78d155d6fff5698289342b62759a75b20d130)
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