2 * Wrapper functions implementing all the long double math functions
3 * defined by SuSv3 by actually calling the double version of
4 * each function and then casting the result back to a long double
5 * to return to the user.
7 * Copyright (C) 2005 by Erik Andersen <andersen@uclibc.org>
9 * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
13 /* Prevent math.h from defining colliding inlines */
14 #undef __USE_EXTERN_INLINES
18 #if !defined __NO_LONG_DOUBLE_MATH
19 # define WRAPPER1(func) \
20 long double func##l(long double x) \
22 return (long double) func((double) x); \
24 # define WRAPPER2(func) \
25 long double func##l(long double x, long double y) \
27 return (long double) func((double) x, (double) y); \
29 # define int_WRAPPER1(func) \
30 int func##l(long double x) \
32 return func((double) x); \
34 # define long_WRAPPER1(func) \
35 long func##l(long double x) \
37 return func((double) x); \
39 # define long_long_WRAPPER1(func) \
40 long long func##l(long double x) \
42 return func((double) x); \
45 /* Implement the following, as defined by SuSv3 */
47 long double asinhl(long double);
48 long double atanl(long double);
49 long double cargl(long double complex);
50 long double cbrtl(long double);
51 long double ceill(long double);
52 long double copysignl(long double, long double);
53 long double cosl(long double);
54 long double erfcl(long double);
55 long double erfl(long double);
56 long double expm1l(long double);
57 long double fabsl(long double);
58 long double fdiml(long double, long double);
59 long double floorl(long double);
60 long double fmal(long double, long double, long double);
61 long double fmaxl(long double, long double);
62 long double fminl(long double, long double);
63 long double frexpl(long double value
, int *);
64 int ilogbl(long double);
65 long double ldexpl(long double, int);
66 long long llrintl(long double);
67 long long llroundl(long double);
68 long double log1pl(long double);
69 long double logbl(long double);
70 long lrintl(long double);
71 long lroundl(long double);
72 long double modfl(long double, long double *);
73 long double nearbyintl(long double);
74 long double nextafterl(long double, long double);
75 long double nexttowardl(long double, long double);
76 long double remquol(long double, long double, int *);
77 long double rintl(long double);
78 long double roundl(long double);
79 long double scalblnl(long double, long);
80 long double scalbnl(long double, int);
81 long double sinl(long double);
82 long double tanhl(long double);
83 long double tanl(long double);
84 long double truncl(long double);
87 /* The following functions implemented as wrappers
88 * in separate files (w_funcl.c)
91 long double acosl(long double);
92 long double acoshl(long double);
93 long double asinl(long double);
94 long double atan2l(long double, long double);
95 long double atanhl(long double);
96 long double coshl(long double);
97 long double exp2l(long double);
98 long double expl(long double);
99 long double fmodl(long double, long double);
100 long double hypotl(long double, long double);
101 long double lgammal(long double);
102 long double log10l(long double);
103 long double log2l(long double);
104 long double logl(long double);
105 long double powl(long double, long double);
106 long double remainderl(long double, long double);
107 long double sinhl(long double);
108 long double sqrtl(long double);
109 long double j0l(long double x
);
110 long double j1l(long double x
);
111 long double jnl(int n
, long double x
);
112 long double y0l(long double x
);
113 long double y1l(long double x
);
114 long double ynl(int n
, long double x
);
115 long double tgammal(long double x
);
116 long double scalbl(long double x
, long double fn
);
117 long double gammal(long double x
);
118 long double scalbl(long double x
, long double fn
);
131 long double cargl (long double complex x
)
133 return (long double) carg( (double complex)x
);
151 libm_hidden_def(cosl
)
179 long double fmal (long double x
, long double y
, long double z
)
181 return (long double) fma( (double)x
, (double)y
, (double)z
);
194 long double frexpl (long double x
, int *ex
)
196 return (long double) frexp( (double)x
, ex
);
205 long double ldexpl (long double x
, int ex
)
207 return (long double) ldexp( (double)x
, ex
);
212 long_long_WRAPPER1(llrint
)
216 long_long_WRAPPER1(llround
)
232 long_WRAPPER1(lround
)
236 long double modfl (long double x
, long double *iptr
)
239 result
= modf ( x
, &y
);
240 *iptr
= (long double)y
;
241 return (long double) result
;
251 libm_hidden_def(nextafterl
)
256 strong_alias(nextafterl
, nexttowardl
)
258 long double nexttowardl(long double x
, long double y
)
260 return nextafterl(x
, y
);
266 long double remquol (long double x
, long double y
, int *quo
)
268 return (long double) remquo( (double)x
, (double)y
, quo
);
281 long double scalblnl (long double x
, long ex
)
283 return (long double) scalbln( (double)x
, ex
);
288 long double scalbnl (long double x
, int ex
)
290 return (long double) scalbn( (double)x
, ex
);
296 libm_hidden_def(sinl
)
311 #ifdef L_significandl
312 WRAPPER1(significand
)
316 #if defined __DO_C99_MATH__ && !defined __NO_LONG_DOUBLE_MATH
318 # ifdef L___fpclassifyl
319 int_WRAPPER1(__fpclassify
)
320 libm_hidden_def(__fpclassifyl
)
324 int_WRAPPER1(__finite
)
325 libm_hidden_def(__finitel
)
329 int_WRAPPER1(__signbit
)
330 libm_hidden_def(__signbitl
)
334 int_WRAPPER1(__isnan
)
335 libm_hidden_def(__isnanl
)
339 int_WRAPPER1(__isinf
)
340 libm_hidden_def(__isinfl
)
343 #endif /* __DO_C99_MATH__ */
345 #endif /* __NO_LONG_DOUBLE_MATH */