summaryrefslogtreecommitdiffstats
path: root/gl/math.in.h
diff options
context:
space:
mode:
Diffstat (limited to 'gl/math.in.h')
-rw-r--r--gl/math.in.h585
1 files changed, 384 insertions, 201 deletions
diff --git a/gl/math.in.h b/gl/math.in.h
index a0efefda..fbc29184 100644
--- a/gl/math.in.h
+++ b/gl/math.in.h
@@ -1,6 +1,6 @@
1/* A GNU-like <math.h>. 1/* A GNU-like <math.h>.
2 2
3 Copyright (C) 2002-2003, 2007-2009 Free Software Foundation, Inc. 3 Copyright (C) 2002-2003, 2007-2010 Free Software Foundation, Inc.
4 4
5 This program is free software: you can redistribute it and/or modify 5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
@@ -22,18 +22,48 @@
22#endif 22#endif
23 23
24/* The include_next requires a split double-inclusion guard. */ 24/* The include_next requires a split double-inclusion guard. */
25#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_MATH_H@ 25#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
26 26
27#ifndef _GL_MATH_H 27#ifndef _GL_MATH_H
28#define _GL_MATH_H 28#define _GL_MATH_H
29 29
30 30
31/* The definition of GL_LINK_WARNING is copied here. */ 31/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
32 32
33 33/* The definition of _GL_ARG_NONNULL is copied here. */
34#ifdef __cplusplus 34
35extern "C" { 35/* The definition of _GL_WARN_ON_USE is copied here. */
36#endif 36
37/* Helper macros to define a portability warning for the
38 classification macro FUNC called with VALUE. POSIX declares the
39 classification macros with an argument of real-floating (that is,
40 one of float, double, or long double). */
41#define _GL_WARN_REAL_FLOATING_DECL(func) \
42static inline int \
43rpl_ ## func ## f (float f) \
44{ \
45 return func (f); \
46} \
47static inline int \
48rpl_ ## func ## d (double d) \
49{ \
50 return func (d); \
51} \
52static inline int \
53rpl_ ## func ## l (long double l) \
54{ \
55 return func (l); \
56} \
57_GL_WARN_ON_USE (rpl_ ## func ## f, #func " is unportable - " \
58 "use gnulib module " #func " for portability"); \
59_GL_WARN_ON_USE (rpl_ ## func ## d, #func " is unportable - " \
60 "use gnulib module " #func " for portability"); \
61_GL_WARN_ON_USE (rpl_ ## func ## l, #func " is unportable - " \
62 "use gnulib module " #func " for portability")
63#define _GL_WARN_REAL_FLOATING_IMPL(func, value) \
64 (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value) \
65 : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value) \
66 : rpl_ ## func ## l (value))
37 67
38 68
39/* POSIX allows platforms that don't support NAN. But all major 69/* POSIX allows platforms that don't support NAN. But all major
@@ -64,6 +94,7 @@ _NaN ()
64# define HUGE_VAL (1.0 / 0.0) 94# define HUGE_VAL (1.0 / 0.0)
65#endif 95#endif
66 96
97
67/* Write x as 98/* Write x as
68 x = mantissa * 2^exp 99 x = mantissa * 2^exp
69 where 100 where
@@ -73,129 +104,198 @@ _NaN ()
73 Store exp in *EXPPTR and return mantissa. */ 104 Store exp in *EXPPTR and return mantissa. */
74#if @GNULIB_FREXP@ 105#if @GNULIB_FREXP@
75# if @REPLACE_FREXP@ 106# if @REPLACE_FREXP@
76# define frexp rpl_frexp 107# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
77extern double frexp (double x, int *expptr); 108# define frexp rpl_frexp
109# endif
110_GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2)));
111_GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr));
112# else
113_GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr));
78# endif 114# endif
115_GL_CXXALIASWARN (frexp);
79#elif defined GNULIB_POSIXCHECK 116#elif defined GNULIB_POSIXCHECK
80# undef frexp 117# undef frexp
81# define frexp(x,e) \ 118/* Assume frexp is always declared. */
82 (GL_LINK_WARNING ("frexp is unportable - " \ 119_GL_WARN_ON_USE (frexp, "frexp is unportable - "
83 "use gnulib module frexp for portability"), \ 120 "use gnulib module frexp for portability");
84 frexp (x, e))
85#endif 121#endif
86 122
87 123
88#if @GNULIB_MATHL@ || !@HAVE_DECL_ACOSL@ 124#if @GNULIB_LOGB@
89extern long double acosl (long double x); 125# if !@HAVE_DECL_LOGB@
126_GL_EXTERN_C double logb (double x);
127# endif
128#elif defined GNULIB_POSIXCHECK
129# undef logb
130# if HAVE_RAW_DECL_LOGB
131_GL_WARN_ON_USE (logb, "logb is unportable - "
132 "use gnulib module logb for portability");
133# endif
90#endif 134#endif
91#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK 135
136
137#if @GNULIB_ACOSL@
138# if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@
139_GL_FUNCDECL_SYS (acosl, long double, (long double x));
140# endif
141_GL_CXXALIAS_SYS (acosl, long double, (long double x));
142_GL_CXXALIASWARN (acosl);
143#elif defined GNULIB_POSIXCHECK
92# undef acosl 144# undef acosl
93# define acosl(x) \ 145# if HAVE_RAW_DECL_ACOSL
94 (GL_LINK_WARNING ("acosl is unportable - " \ 146_GL_WARN_ON_USE (acosl, "acosl is unportable - "
95 "use gnulib module mathl for portability"), \ 147 "use gnulib module mathl for portability");
96 acosl (x)) 148# endif
97#endif 149#endif
98 150
99 151
100#if @GNULIB_MATHL@ || !@HAVE_DECL_ASINL@ 152#if @GNULIB_ASINL@
101extern long double asinl (long double x); 153# if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@
102#endif 154_GL_FUNCDECL_SYS (asinl, long double, (long double x));
103#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK 155# endif
156_GL_CXXALIAS_SYS (asinl, long double, (long double x));
157_GL_CXXALIASWARN (asinl);
158#elif defined GNULIB_POSIXCHECK
104# undef asinl 159# undef asinl
105# define asinl(x) \ 160# if HAVE_RAW_DECL_ASINL
106 (GL_LINK_WARNING ("asinl is unportable - " \ 161_GL_WARN_ON_USE (asinl, "asinl is unportable - "
107 "use gnulib module mathl for portability"), \ 162 "use gnulib module mathl for portability");
108 asinl (x)) 163# endif
109#endif 164#endif
110 165
111 166
112#if @GNULIB_MATHL@ || !@HAVE_DECL_ATANL@ 167#if @GNULIB_ATANL@
113extern long double atanl (long double x); 168# if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@
114#endif 169_GL_FUNCDECL_SYS (atanl, long double, (long double x));
115#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK 170# endif
171_GL_CXXALIAS_SYS (atanl, long double, (long double x));
172_GL_CXXALIASWARN (atanl);
173#elif defined GNULIB_POSIXCHECK
116# undef atanl 174# undef atanl
117# define atanl(x) \ 175# if HAVE_RAW_DECL_ATANL
118 (GL_LINK_WARNING ("atanl is unportable - " \ 176_GL_WARN_ON_USE (atanl, "atanl is unportable - "
119 "use gnulib module mathl for portability"), \ 177 "use gnulib module mathl for portability");
120 atanl (x)) 178# endif
121#endif 179#endif
122 180
123 181
124#if @GNULIB_CEILF@ 182#if @GNULIB_CEILF@
125# if @REPLACE_CEILF@ 183# if @REPLACE_CEILF@
126# define ceilf rpl_ceilf 184# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
127extern float ceilf (float x); 185# define ceilf rpl_ceilf
186# endif
187_GL_FUNCDECL_RPL (ceilf, float, (float x));
188_GL_CXXALIAS_RPL (ceilf, float, (float x));
189# else
190# if !@HAVE_DECL_CEILF@
191_GL_FUNCDECL_SYS (ceilf, float, (float x));
192# endif
193_GL_CXXALIAS_SYS (ceilf, float, (float x));
128# endif 194# endif
195_GL_CXXALIASWARN (ceilf);
129#elif defined GNULIB_POSIXCHECK 196#elif defined GNULIB_POSIXCHECK
130# undef ceilf 197# undef ceilf
131# define ceilf(x) \ 198# if HAVE_RAW_DECL_CEILF
132 (GL_LINK_WARNING ("ceilf is unportable - " \ 199_GL_WARN_ON_USE (ceilf, "ceilf is unportable - "
133 "use gnulib module ceilf for portability"), \ 200 "use gnulib module ceilf for portability");
134 ceilf (x)) 201# endif
135#endif 202#endif
136 203
137#if @GNULIB_CEILL@ 204#if @GNULIB_CEILL@
138# if @REPLACE_CEILL@ 205# if @REPLACE_CEILL@
139# define ceill rpl_ceill 206# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
140extern long double ceill (long double x); 207# define ceill rpl_ceill
208# endif
209_GL_FUNCDECL_RPL (ceill, long double, (long double x));
210_GL_CXXALIAS_RPL (ceill, long double, (long double x));
211# else
212# if !@HAVE_DECL_CEILL@
213_GL_FUNCDECL_SYS (ceill, long double, (long double x));
214# endif
215_GL_CXXALIAS_SYS (ceill, long double, (long double x));
141# endif 216# endif
217_GL_CXXALIASWARN (ceill);
142#elif defined GNULIB_POSIXCHECK 218#elif defined GNULIB_POSIXCHECK
143# undef ceill 219# undef ceill
144# define ceill(x) \ 220# if HAVE_RAW_DECL_CEILL
145 (GL_LINK_WARNING ("ceill is unportable - " \ 221_GL_WARN_ON_USE (ceill, "ceill is unportable - "
146 "use gnulib module ceill for portability"), \ 222 "use gnulib module ceill for portability");
147 ceill (x)) 223# endif
148#endif 224#endif
149 225
150 226
151#if @GNULIB_MATHL@ || !@HAVE_DECL_COSL@ 227#if @GNULIB_COSL@
152extern long double cosl (long double x); 228# if !@HAVE_COSL@ || !@HAVE_DECL_COSL@
153#endif 229_GL_FUNCDECL_SYS (cosl, long double, (long double x));
154#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK 230# endif
231_GL_CXXALIAS_SYS (cosl, long double, (long double x));
232_GL_CXXALIASWARN (cosl);
233#elif defined GNULIB_POSIXCHECK
155# undef cosl 234# undef cosl
156# define cosl(x) \ 235# if HAVE_RAW_DECL_COSL
157 (GL_LINK_WARNING ("cosl is unportable - " \ 236_GL_WARN_ON_USE (cosl, "cosl is unportable - "
158 "use gnulib module mathl for portability"), \ 237 "use gnulib module mathl for portability");
159 cosl (x)) 238# endif
160#endif 239#endif
161 240
162 241
163#if @GNULIB_MATHL@ || !@HAVE_DECL_EXPL@ 242#if @GNULIB_EXPL@
164extern long double expl (long double x); 243# if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@
165#endif 244_GL_FUNCDECL_SYS (expl, long double, (long double x));
166#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK 245# endif
246_GL_CXXALIAS_SYS (expl, long double, (long double x));
247_GL_CXXALIASWARN (expl);
248#elif defined GNULIB_POSIXCHECK
167# undef expl 249# undef expl
168# define expl(x) \ 250# if HAVE_RAW_DECL_EXPL
169 (GL_LINK_WARNING ("expl is unportable - " \ 251_GL_WARN_ON_USE (expl, "expl is unportable - "
170 "use gnulib module mathl for portability"), \ 252 "use gnulib module mathl for portability");
171 expl (x)) 253# endif
172#endif 254#endif
173 255
174 256
175#if @GNULIB_FLOORF@ 257#if @GNULIB_FLOORF@
176# if @REPLACE_FLOORF@ 258# if @REPLACE_FLOORF@
177# define floorf rpl_floorf 259# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
178extern float floorf (float x); 260# define floorf rpl_floorf
261# endif
262_GL_FUNCDECL_RPL (floorf, float, (float x));
263_GL_CXXALIAS_RPL (floorf, float, (float x));
264#else
265# if !@HAVE_DECL_FLOORF@
266_GL_FUNCDECL_SYS (floorf, float, (float x));
267# endif
268_GL_CXXALIAS_SYS (floorf, float, (float x));
179# endif 269# endif
270_GL_CXXALIASWARN (floorf);
180#elif defined GNULIB_POSIXCHECK 271#elif defined GNULIB_POSIXCHECK
181# undef floorf 272# undef floorf
182# define floorf(x) \ 273# if HAVE_RAW_DECL_FLOORF
183 (GL_LINK_WARNING ("floorf is unportable - " \ 274_GL_WARN_ON_USE (floorf, "floorf is unportable - "
184 "use gnulib module floorf for portability"), \ 275 "use gnulib module floorf for portability");
185 floorf (x)) 276# endif
186#endif 277#endif
187 278
188#if @GNULIB_FLOORL@ 279#if @GNULIB_FLOORL@
189# if @REPLACE_FLOORL@ 280# if @REPLACE_FLOORL@
190# define floorl rpl_floorl 281# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
191extern long double floorl (long double x); 282# define floorl rpl_floorl
283# endif
284_GL_FUNCDECL_RPL (floorl, long double, (long double x));
285_GL_CXXALIAS_RPL (floorl, long double, (long double x));
286# else
287# if !@HAVE_DECL_FLOORL@
288_GL_FUNCDECL_SYS (floorl, long double, (long double x));
289# endif
290_GL_CXXALIAS_SYS (floorl, long double, (long double x));
192# endif 291# endif
292_GL_CXXALIASWARN (floorl);
193#elif defined GNULIB_POSIXCHECK 293#elif defined GNULIB_POSIXCHECK
194# undef floorl 294# undef floorl
195# define floorl(x) \ 295# if HAVE_RAW_DECL_FLOORL
196 (GL_LINK_WARNING ("floorl is unportable - " \ 296_GL_WARN_ON_USE (floorl, "floorl is unportable - "
197 "use gnulib module floorl for portability"), \ 297 "use gnulib module floorl for portability");
198 floorl (x)) 298# endif
199#endif 299#endif
200 300
201 301
@@ -207,173 +307,247 @@ extern long double floorl (long double x);
207 If x is infinite or NaN: mantissa = x, exp unspecified. 307 If x is infinite or NaN: mantissa = x, exp unspecified.
208 Store exp in *EXPPTR and return mantissa. */ 308 Store exp in *EXPPTR and return mantissa. */
209#if @GNULIB_FREXPL@ && @REPLACE_FREXPL@ 309#if @GNULIB_FREXPL@ && @REPLACE_FREXPL@
210# define frexpl rpl_frexpl 310# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
311# define frexpl rpl_frexpl
312# endif
313_GL_FUNCDECL_RPL (frexpl, long double,
314 (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
315_GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr));
316#else
317# if !@HAVE_DECL_FREXPL@
318_GL_FUNCDECL_SYS (frexpl, long double,
319 (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
320# endif
321# if @GNULIB_FREXPL@
322_GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr));
323# endif
211#endif 324#endif
212#if (@GNULIB_FREXPL@ && @REPLACE_FREXPL@) || !@HAVE_DECL_FREXPL@ 325#if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@)
213extern long double frexpl (long double x, int *expptr); 326_GL_CXXALIASWARN (frexpl);
214#endif 327#endif
215#if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK 328#if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK
216# undef frexpl 329# undef frexpl
217# define frexpl(x,e) \ 330# if HAVE_RAW_DECL_FREXPL
218 (GL_LINK_WARNING ("frexpl is unportable - " \ 331_GL_WARN_ON_USE (frexpl, "frexpl is unportable - "
219 "use gnulib module frexpl for portability"), \ 332 "use gnulib module frexpl for portability");
220 frexpl (x, e)) 333# endif
221#endif 334#endif
222 335
223 336
224/* Return x * 2^exp. */ 337/* Return x * 2^exp. */
225#if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@ 338#if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@
226# define ldexpl rpl_ldexpl 339# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
340# define ldexpl rpl_ldexpl
341# endif
342_GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp));
343_GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp));
344#else
345# if !@HAVE_DECL_LDEXPL@
346_GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp));
347# endif
348# if @GNULIB_LDEXPL@
349_GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp));
350# endif
227#endif 351#endif
228#if (@GNULIB_LDEXPL@ && @REPLACE_LDEXPL@) || !@HAVE_DECL_LDEXPL@ 352#if @GNULIB_LDEXPL@
229extern long double ldexpl (long double x, int exp); 353_GL_CXXALIASWARN (ldexpl);
230#endif 354#endif
231#if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK 355#if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK
232# undef ldexpl 356# undef ldexpl
233# define ldexpl(x,e) \ 357# if HAVE_RAW_DECL_LDEXPL
234 (GL_LINK_WARNING ("ldexpl is unportable - " \ 358_GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - "
235 "use gnulib module ldexpl for portability"), \ 359 "use gnulib module ldexpl for portability");
236 ldexpl (x, e)) 360# endif
237#endif 361#endif
238 362
239 363
240#if @GNULIB_MATHL@ || !@HAVE_DECL_LOGL@ 364#if @GNULIB_LOGL@
241extern long double logl (long double x); 365# if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@
242#endif 366_GL_FUNCDECL_SYS (logl, long double, (long double x));
243#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK 367# endif
368_GL_CXXALIAS_SYS (logl, long double, (long double x));
369_GL_CXXALIASWARN (logl);
370#elif defined GNULIB_POSIXCHECK
244# undef logl 371# undef logl
245# define logl(x) \ 372# if HAVE_RAW_DECL_LOGL
246 (GL_LINK_WARNING ("logl is unportable - " \ 373_GL_WARN_ON_USE (logl, "logl is unportable - "
247 "use gnulib module mathl for portability"), \ 374 "use gnulib module mathl for portability");
248 logl (x)) 375# endif
249#endif 376#endif
250 377
251 378
252#if @GNULIB_ROUNDF@ 379#if @GNULIB_ROUNDF@
253# if @REPLACE_ROUNDF@ 380# if @REPLACE_ROUNDF@
254# undef roundf 381# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
255# define roundf rpl_roundf 382# undef roundf
256extern float roundf (float x); 383# define roundf rpl_roundf
384# endif
385_GL_FUNCDECL_RPL (roundf, float, (float x));
386_GL_CXXALIAS_RPL (roundf, float, (float x));
387# else
388# if !@HAVE_DECL_ROUNDF@
389_GL_FUNCDECL_SYS (roundf, float, (float x));
390# endif
391_GL_CXXALIAS_SYS (roundf, float, (float x));
257# endif 392# endif
393_GL_CXXALIASWARN (roundf);
258#elif defined GNULIB_POSIXCHECK 394#elif defined GNULIB_POSIXCHECK
259# undef roundf 395# undef roundf
260# define roundf(x) \ 396# if HAVE_RAW_DECL_ROUNDF
261 (GL_LINK_WARNING ("roundf is unportable - " \ 397_GL_WARN_ON_USE (roundf, "roundf is unportable - "
262 "use gnulib module roundf for portability"), \ 398 "use gnulib module roundf for portability");
263 roundf (x)) 399# endif
264#endif 400#endif
265 401
266#if @GNULIB_ROUND@ 402#if @GNULIB_ROUND@
267# if @REPLACE_ROUND@ 403# if @REPLACE_ROUND@
268# undef round 404# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
269# define round rpl_round 405# undef round
270extern double round (double x); 406# define round rpl_round
407# endif
408_GL_FUNCDECL_RPL (round, double, (double x));
409_GL_CXXALIAS_RPL (round, double, (double x));
410# else
411# if !@HAVE_DECL_ROUND@
412_GL_FUNCDECL_SYS (round, double, (double x));
413# endif
414_GL_CXXALIAS_SYS (round, double, (double x));
271# endif 415# endif
416_GL_CXXALIASWARN (round);
272#elif defined GNULIB_POSIXCHECK 417#elif defined GNULIB_POSIXCHECK
273# undef round 418# undef round
274# define round(x) \ 419# if HAVE_RAW_DECL_ROUND
275 (GL_LINK_WARNING ("round is unportable - " \ 420_GL_WARN_ON_USE (round, "round is unportable - "
276 "use gnulib module round for portability"), \ 421 "use gnulib module round for portability");
277 round (x)) 422# endif
278#endif 423#endif
279 424
280#if @GNULIB_ROUNDL@ 425#if @GNULIB_ROUNDL@
281# if @REPLACE_ROUNDL@ 426# if @REPLACE_ROUNDL@
282# undef roundl 427# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
283# define roundl rpl_roundl 428# undef roundl
284extern long double roundl (long double x); 429# define roundl rpl_roundl
430# endif
431_GL_FUNCDECL_RPL (roundl, long double, (long double x));
432_GL_CXXALIAS_RPL (roundl, long double, (long double x));
433# else
434# if !@HAVE_DECL_ROUNDL@
435_GL_FUNCDECL_SYS (roundl, long double, (long double x));
436# endif
437_GL_CXXALIAS_SYS (roundl, long double, (long double x));
285# endif 438# endif
439_GL_CXXALIASWARN (roundl);
286#elif defined GNULIB_POSIXCHECK 440#elif defined GNULIB_POSIXCHECK
287# undef roundl 441# undef roundl
288# define roundl(x) \ 442# if HAVE_RAW_DECL_ROUNDL
289 (GL_LINK_WARNING ("roundl is unportable - " \ 443_GL_WARN_ON_USE (roundl, "roundl is unportable - "
290 "use gnulib module roundl for portability"), \ 444 "use gnulib module roundl for portability");
291 roundl (x)) 445# endif
292#endif 446#endif
293 447
294 448
295#if @GNULIB_MATHL@ || !@HAVE_DECL_SINL@ 449#if @GNULIB_SINL@
296extern long double sinl (long double x); 450# if !@HAVE_SINL@ || !@HAVE_DECL_SINL@
297#endif 451_GL_FUNCDECL_SYS (sinl, long double, (long double x));
298#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK 452# endif
453_GL_CXXALIAS_SYS (sinl, long double, (long double x));
454_GL_CXXALIASWARN (sinl);
455#elif defined GNULIB_POSIXCHECK
299# undef sinl 456# undef sinl
300# define sinl(x) \ 457# if HAVE_RAW_DECL_SINL
301 (GL_LINK_WARNING ("sinl is unportable - " \ 458_GL_WARN_ON_USE (sinl, "sinl is unportable - "
302 "use gnulib module mathl for portability"), \ 459 "use gnulib module mathl for portability");
303 sinl (x)) 460# endif
304#endif 461#endif
305 462
306 463
307#if @GNULIB_MATHL@ || !@HAVE_DECL_SQRTL@ 464#if @GNULIB_SQRTL@
308extern long double sqrtl (long double x); 465# if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@
309#endif 466_GL_FUNCDECL_SYS (sqrtl, long double, (long double x));
310#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK 467# endif
468_GL_CXXALIAS_SYS (sqrtl, long double, (long double x));
469_GL_CXXALIASWARN (sqrtl);
470#elif defined GNULIB_POSIXCHECK
311# undef sqrtl 471# undef sqrtl
312# define sqrtl(x) \ 472# if HAVE_RAW_DECL_SQRTL
313 (GL_LINK_WARNING ("sqrtl is unportable - " \ 473_GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - "
314 "use gnulib module mathl for portability"), \ 474 "use gnulib module mathl for portability");
315 sqrtl (x)) 475# endif
316#endif 476#endif
317 477
318 478
319#if @GNULIB_MATHL@ || !@HAVE_DECL_TANL@ 479#if @GNULIB_TANL@
320extern long double tanl (long double x); 480# if !@HAVE_TANL@ || !@HAVE_DECL_TANL@
321#endif 481_GL_FUNCDECL_SYS (tanl, long double, (long double x));
322#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK 482# endif
483_GL_CXXALIAS_SYS (tanl, long double, (long double x));
484_GL_CXXALIASWARN (tanl);
485#elif defined GNULIB_POSIXCHECK
323# undef tanl 486# undef tanl
324# define tanl(x) \ 487# if HAVE_RAW_DECL_TANL
325 (GL_LINK_WARNING ("tanl is unportable - " \ 488_GL_WARN_ON_USE (tanl, "tanl is unportable - "
326 "use gnulib module mathl for portability"), \ 489 "use gnulib module mathl for portability");
327 tanl (x)) 490# endif
328#endif 491#endif
329 492
330 493
331#if @GNULIB_TRUNCF@ 494#if @GNULIB_TRUNCF@
332# if !@HAVE_DECL_TRUNCF@ 495# if !@HAVE_DECL_TRUNCF@
333# define truncf rpl_truncf 496_GL_FUNCDECL_SYS (truncf, float, (float x));
334extern float truncf (float x);
335# endif 497# endif
498_GL_CXXALIAS_SYS (truncf, float, (float x));
499_GL_CXXALIASWARN (truncf);
336#elif defined GNULIB_POSIXCHECK 500#elif defined GNULIB_POSIXCHECK
337# undef truncf 501# undef truncf
338# define truncf(x) \ 502# if HAVE_RAW_DECL_TRUNCF
339 (GL_LINK_WARNING ("truncf is unportable - " \ 503_GL_WARN_ON_USE (truncf, "truncf is unportable - "
340 "use gnulib module truncf for portability"), \ 504 "use gnulib module truncf for portability");
341 truncf (x)) 505# endif
342#endif 506#endif
343 507
344#if @GNULIB_TRUNC@ 508#if @GNULIB_TRUNC@
345# if !@HAVE_DECL_TRUNC@ 509# if !@HAVE_DECL_TRUNC@
346# define trunc rpl_trunc 510_GL_FUNCDECL_SYS (trunc, double, (double x));
347extern double trunc (double x);
348# endif 511# endif
512_GL_CXXALIAS_SYS (trunc, double, (double x));
513_GL_CXXALIASWARN (trunc);
349#elif defined GNULIB_POSIXCHECK 514#elif defined GNULIB_POSIXCHECK
350# undef trunc 515# undef trunc
351# define trunc(x) \ 516# if HAVE_RAW_DECL_TRUNC
352 (GL_LINK_WARNING ("trunc is unportable - " \ 517_GL_WARN_ON_USE (trunc, "trunc is unportable - "
353 "use gnulib module trunc for portability"), \ 518 "use gnulib module trunc for portability");
354 trunc (x)) 519# endif
355#endif 520#endif
356 521
357#if @GNULIB_TRUNCL@ 522#if @GNULIB_TRUNCL@
358# if @REPLACE_TRUNCL@ 523# if @REPLACE_TRUNCL@
359# undef truncl 524# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
360# define truncl rpl_truncl 525# undef truncl
361extern long double truncl (long double x); 526# define truncl rpl_truncl
527# endif
528_GL_FUNCDECL_RPL (truncl, long double, (long double x));
529_GL_CXXALIAS_RPL (truncl, long double, (long double x));
530# else
531# if !@HAVE_DECL_TRUNCL@
532_GL_FUNCDECL_SYS (truncl, long double, (long double x));
533# endif
534_GL_CXXALIAS_SYS (truncl, long double, (long double x));
362# endif 535# endif
536_GL_CXXALIASWARN (truncl);
363#elif defined GNULIB_POSIXCHECK 537#elif defined GNULIB_POSIXCHECK
364# undef truncl 538# undef truncl
365# define truncl(x) \ 539# if HAVE_RAW_DECL_TRUNCL
366 (GL_LINK_WARNING ("truncl is unportable - " \ 540_GL_WARN_ON_USE (truncl, "truncl is unportable - "
367 "use gnulib module truncl for portability"), \ 541 "use gnulib module truncl for portability");
368 truncl (x)) 542# endif
369#endif 543#endif
370 544
371 545
372#if @GNULIB_ISFINITE@ 546#if @GNULIB_ISFINITE@
373# if @REPLACE_ISFINITE@ 547# if @REPLACE_ISFINITE@
374extern int gl_isfinitef (float x); 548_GL_EXTERN_C int gl_isfinitef (float x);
375extern int gl_isfinited (double x); 549_GL_EXTERN_C int gl_isfinited (double x);
376extern int gl_isfinitel (long double x); 550_GL_EXTERN_C int gl_isfinitel (long double x);
377# undef isfinite 551# undef isfinite
378# define isfinite(x) \ 552# define isfinite(x) \
379 (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \ 553 (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \
@@ -381,15 +555,19 @@ extern int gl_isfinitel (long double x);
381 gl_isfinitef (x)) 555 gl_isfinitef (x))
382# endif 556# endif
383#elif defined GNULIB_POSIXCHECK 557#elif defined GNULIB_POSIXCHECK
384 /* How to override a macro? */ 558# if defined isfinite
559_GL_WARN_REAL_FLOATING_DECL (isfinite);
560# undef isfinite
561# define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x)
562# endif
385#endif 563#endif
386 564
387 565
388#if @GNULIB_ISINF@ 566#if @GNULIB_ISINF@
389# if @REPLACE_ISINF@ 567# if @REPLACE_ISINF@
390extern int gl_isinff (float x); 568_GL_EXTERN_C int gl_isinff (float x);
391extern int gl_isinfd (double x); 569_GL_EXTERN_C int gl_isinfd (double x);
392extern int gl_isinfl (long double x); 570_GL_EXTERN_C int gl_isinfl (long double x);
393# undef isinf 571# undef isinf
394# define isinf(x) \ 572# define isinf(x) \
395 (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \ 573 (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \
@@ -397,7 +575,11 @@ extern int gl_isinfl (long double x);
397 gl_isinff (x)) 575 gl_isinff (x))
398# endif 576# endif
399#elif defined GNULIB_POSIXCHECK 577#elif defined GNULIB_POSIXCHECK
400 /* How to override a macro? */ 578# if defined isinf
579_GL_WARN_REAL_FLOATING_DECL (isinf);
580# undef isinf
581# define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x)
582# endif
401#endif 583#endif
402 584
403 585
@@ -406,7 +588,6 @@ extern int gl_isinfl (long double x);
406# if @HAVE_ISNANF@ 588# if @HAVE_ISNANF@
407/* The original <math.h> included above provides a declaration of isnan macro 589/* The original <math.h> included above provides a declaration of isnan macro
408 or (older) isnanf function. */ 590 or (older) isnanf function. */
409# include <math.h>
410# if __GNUC__ >= 4 591# if __GNUC__ >= 4
411 /* GCC 4.0 and newer provides three built-ins for isnan. */ 592 /* GCC 4.0 and newer provides three built-ins for isnan. */
412# undef isnanf 593# undef isnanf
@@ -419,7 +600,7 @@ extern int gl_isinfl (long double x);
419/* Test whether X is a NaN. */ 600/* Test whether X is a NaN. */
420# undef isnanf 601# undef isnanf
421# define isnanf rpl_isnanf 602# define isnanf rpl_isnanf
422extern int isnanf (float x); 603_GL_EXTERN_C int isnanf (float x);
423# endif 604# endif
424#endif 605#endif
425 606
@@ -429,7 +610,6 @@ extern int isnanf (float x);
429 to 'double' numbers earlier but now is a type-generic macro. */ 610 to 'double' numbers earlier but now is a type-generic macro. */
430# if @HAVE_ISNAND@ 611# if @HAVE_ISNAND@
431/* The original <math.h> included above provides a declaration of isnan macro. */ 612/* The original <math.h> included above provides a declaration of isnan macro. */
432# include <math.h>
433# if __GNUC__ >= 4 613# if __GNUC__ >= 4
434 /* GCC 4.0 and newer provides three built-ins for isnan. */ 614 /* GCC 4.0 and newer provides three built-ins for isnan. */
435# undef isnand 615# undef isnand
@@ -442,7 +622,7 @@ extern int isnanf (float x);
442/* Test whether X is a NaN. */ 622/* Test whether X is a NaN. */
443# undef isnand 623# undef isnand
444# define isnand rpl_isnand 624# define isnand rpl_isnand
445extern int isnand (double x); 625_GL_EXTERN_C int isnand (double x);
446# endif 626# endif
447#endif 627#endif
448 628
@@ -450,7 +630,6 @@ extern int isnand (double x);
450/* Test for NaN for 'long double' numbers. */ 630/* Test for NaN for 'long double' numbers. */
451# if @HAVE_ISNANL@ 631# if @HAVE_ISNANL@
452/* The original <math.h> included above provides a declaration of isnan macro or (older) isnanl function. */ 632/* The original <math.h> included above provides a declaration of isnan macro or (older) isnanl function. */
453# include <math.h>
454# if __GNUC__ >= 4 633# if __GNUC__ >= 4
455 /* GCC 4.0 and newer provides three built-ins for isnan. */ 634 /* GCC 4.0 and newer provides three built-ins for isnan. */
456# undef isnanl 635# undef isnanl
@@ -463,7 +642,7 @@ extern int isnand (double x);
463/* Test whether X is a NaN. */ 642/* Test whether X is a NaN. */
464# undef isnanl 643# undef isnanl
465# define isnanl rpl_isnanl 644# define isnanl rpl_isnanl
466extern int isnanl (long double x); 645_GL_EXTERN_C int isnanl (long double x);
467# endif 646# endif
468#endif 647#endif
469 648
@@ -477,19 +656,19 @@ extern int isnanl (long double x);
477# if @HAVE_ISNANF@ && __GNUC__ >= 4 656# if @HAVE_ISNANF@ && __GNUC__ >= 4
478# define gl_isnan_f(x) __builtin_isnan ((float)(x)) 657# define gl_isnan_f(x) __builtin_isnan ((float)(x))
479# else 658# else
480extern int rpl_isnanf (float x); 659_GL_EXTERN_C int rpl_isnanf (float x);
481# define gl_isnan_f(x) rpl_isnanf (x) 660# define gl_isnan_f(x) rpl_isnanf (x)
482# endif 661# endif
483# if @HAVE_ISNAND@ && __GNUC__ >= 4 662# if @HAVE_ISNAND@ && __GNUC__ >= 4
484# define gl_isnan_d(x) __builtin_isnan ((double)(x)) 663# define gl_isnan_d(x) __builtin_isnan ((double)(x))
485# else 664# else
486extern int rpl_isnand (double x); 665_GL_EXTERN_C int rpl_isnand (double x);
487# define gl_isnan_d(x) rpl_isnand (x) 666# define gl_isnan_d(x) rpl_isnand (x)
488# endif 667# endif
489# if @HAVE_ISNANL@ && __GNUC__ >= 4 668# if @HAVE_ISNANL@ && __GNUC__ >= 4
490# define gl_isnan_l(x) __builtin_isnan ((long double)(x)) 669# define gl_isnan_l(x) __builtin_isnan ((long double)(x))
491# else 670# else
492extern int rpl_isnanl (long double x); 671_GL_EXTERN_C int rpl_isnanl (long double x);
493# define gl_isnan_l(x) rpl_isnanl (x) 672# define gl_isnan_l(x) rpl_isnanl (x)
494# endif 673# endif
495# undef isnan 674# undef isnan
@@ -499,7 +678,11 @@ extern int rpl_isnanl (long double x);
499 gl_isnan_f (x)) 678 gl_isnan_f (x))
500# endif 679# endif
501#elif defined GNULIB_POSIXCHECK 680#elif defined GNULIB_POSIXCHECK
502 /* How to override a macro? */ 681# if defined isnan
682_GL_WARN_REAL_FLOATING_DECL (isnan);
683# undef isnan
684# define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x)
685# endif
503#endif 686#endif
504 687
505 688
@@ -514,38 +697,38 @@ extern int rpl_isnanl (long double x);
514# endif 697# endif
515# if @REPLACE_SIGNBIT@ 698# if @REPLACE_SIGNBIT@
516# undef signbit 699# undef signbit
517extern int gl_signbitf (float arg); 700_GL_EXTERN_C int gl_signbitf (float arg);
518extern int gl_signbitd (double arg); 701_GL_EXTERN_C int gl_signbitd (double arg);
519extern int gl_signbitl (long double arg); 702_GL_EXTERN_C int gl_signbitl (long double arg);
520# if __GNUC__ >= 2 && !__STRICT_ANSI__ 703# if __GNUC__ >= 2 && !__STRICT_ANSI__
521# if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf 704# if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf
522# define gl_signbitf_OPTIMIZED_MACRO 705# define gl_signbitf_OPTIMIZED_MACRO
523# define gl_signbitf(arg) \ 706# define gl_signbitf(arg) \
524 ({ union { float _value; \ 707 ({ union { float _value; \
525 unsigned int _word[(sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ 708 unsigned int _word[(sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \
526 } _m; \ 709 } _m; \
527 _m._value = (arg); \ 710 _m._value = (arg); \
528 (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ 711 (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \
529 }) 712 })
530# endif 713# endif
531# if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd 714# if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd
532# define gl_signbitd_OPTIMIZED_MACRO 715# define gl_signbitd_OPTIMIZED_MACRO
533# define gl_signbitd(arg) \ 716# define gl_signbitd(arg) \
534 ({ union { double _value; \ 717 ({ union { double _value; \
535 unsigned int _word[(sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ 718 unsigned int _word[(sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \
536 } _m; \ 719 } _m; \
537 _m._value = (arg); \ 720 _m._value = (arg); \
538 (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ 721 (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \
539 }) 722 })
540# endif 723# endif
541# if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl 724# if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl
542# define gl_signbitl_OPTIMIZED_MACRO 725# define gl_signbitl_OPTIMIZED_MACRO
543# define gl_signbitl(arg) \ 726# define gl_signbitl(arg) \
544 ({ union { long double _value; \ 727 ({ union { long double _value; \
545 unsigned int _word[(sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ 728 unsigned int _word[(sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \
546 } _m; \ 729 } _m; \
547 _m._value = (arg); \ 730 _m._value = (arg); \
548 (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ 731 (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \
549 }) 732 })
550# endif 733# endif
551# endif 734# endif
@@ -555,13 +738,13 @@ extern int gl_signbitl (long double arg);
555 gl_signbitf (x)) 738 gl_signbitf (x))
556# endif 739# endif
557#elif defined GNULIB_POSIXCHECK 740#elif defined GNULIB_POSIXCHECK
558 /* How to override a macro? */ 741# if defined signbit
742_GL_WARN_REAL_FLOATING_DECL (signbit);
743# undef signbit
744# define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x)
745# endif
559#endif 746#endif
560 747
561 748
562#ifdef __cplusplus
563}
564#endif
565
566#endif /* _GL_MATH_H */ 749#endif /* _GL_MATH_H */
567#endif /* _GL_MATH_H */ 750#endif /* _GL_MATH_H */