OSDN Git Service

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