New module 'modfl'.
[gnulib.git] / lib / math.in.h
1 /* A GNU-like <math.h>.
2
3    Copyright (C) 2002-2003, 2007-2012 Free Software Foundation, Inc.
4
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
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18 #ifndef _@GUARD_PREFIX@_MATH_H
19
20 #if __GNUC__ >= 3
21 @PRAGMA_SYSTEM_HEADER@
22 #endif
23 @PRAGMA_COLUMNS@
24
25 /* The include_next requires a split double-inclusion guard.  */
26 #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
27
28 #ifndef _@GUARD_PREFIX@_MATH_H
29 #define _@GUARD_PREFIX@_MATH_H
30
31
32 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
33
34 /* The definition of _GL_ARG_NONNULL is copied here.  */
35
36 /* The definition of _GL_WARN_ON_USE is copied here.  */
37
38 #ifdef __cplusplus
39 /* Helper macros to define type-generic function FUNC as overloaded functions,
40    rather than as macros like in C.  POSIX declares these with an argument of
41    real-floating (that is, one of float, double, or long double).  */
42 # define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \
43 static inline int                                                   \
44 _gl_cxx_ ## func ## f (float f)                                     \
45 {                                                                   \
46   return func (f);                                                  \
47 }                                                                   \
48 static inline int                                                   \
49 _gl_cxx_ ## func ## d (double d)                                    \
50 {                                                                   \
51   return func (d);                                                  \
52 }                                                                   \
53 static inline int                                                   \
54 _gl_cxx_ ## func ## l (long double l)                               \
55 {                                                                   \
56   return func (l);                                                  \
57 }
58 # define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \
59 inline int                                                          \
60 func (float f)                                                      \
61 {                                                                   \
62   return _gl_cxx_ ## func ## f (f);                                 \
63 }                                                                   \
64 inline int                                                          \
65 func (double d)                                                     \
66 {                                                                   \
67   return _gl_cxx_ ## func ## d (d);                                 \
68 }                                                                   \
69 inline int                                                          \
70 func (long double l)                                                \
71 {                                                                   \
72   return _gl_cxx_ ## func ## l (l);                                 \
73 }
74 #endif
75
76 /* Helper macros to define a portability warning for the
77    classification macro FUNC called with VALUE.  POSIX declares the
78    classification macros with an argument of real-floating (that is,
79    one of float, double, or long double).  */
80 #define _GL_WARN_REAL_FLOATING_DECL(func) \
81 static inline int                                                   \
82 rpl_ ## func ## f (float f)                                         \
83 {                                                                   \
84   return func (f);                                                  \
85 }                                                                   \
86 static inline int                                                   \
87 rpl_ ## func ## d (double d)                                        \
88 {                                                                   \
89   return func (d);                                                  \
90 }                                                                   \
91 static inline int                                                   \
92 rpl_ ## func ## l (long double l)                                   \
93 {                                                                   \
94   return func (l);                                                  \
95 }                                                                   \
96 _GL_WARN_ON_USE (rpl_ ## func ## f, #func " is unportable - "       \
97                  "use gnulib module " #func " for portability");    \
98 _GL_WARN_ON_USE (rpl_ ## func ## d, #func " is unportable - "       \
99                  "use gnulib module " #func " for portability");    \
100 _GL_WARN_ON_USE (rpl_ ## func ## l, #func " is unportable - "       \
101                  "use gnulib module " #func " for portability")
102 #define _GL_WARN_REAL_FLOATING_IMPL(func, value) \
103   (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value)     \
104    : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value)  \
105    : rpl_ ## func ## l (value))
106
107
108 #if @REPLACE_ITOLD@
109 /* Pull in a function that fixes the 'int' to 'long double' conversion
110    of glibc 2.7.  */
111 _GL_EXTERN_C void _Qp_itoq (long double *, int);
112 static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq;
113 #endif
114
115
116 /* POSIX allows platforms that don't support NAN.  But all major
117    machines in the past 15 years have supported something close to
118    IEEE NaN, so we define this unconditionally.  We also must define
119    it on platforms like Solaris 10, where NAN is present but defined
120    as a function pointer rather than a floating point constant.  */
121 #if !defined NAN || @REPLACE_NAN@
122 # if !GNULIB_defined_NAN
123 #  undef NAN
124   /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler
125      choke on the expression 0.0 / 0.0.  */
126 #  if defined __DECC || defined _MSC_VER
127 static float
128 _NaN ()
129 {
130   static float zero = 0.0f;
131   return zero / zero;
132 }
133 #   define NAN (_NaN())
134 #  else
135 #   define NAN (0.0f / 0.0f)
136 #  endif
137 #  define GNULIB_defined_NAN 1
138 # endif
139 #endif
140
141 /* Solaris 10 defines HUGE_VAL, but as a function pointer rather
142    than a floating point constant.  */
143 #if @REPLACE_HUGE_VAL@
144 # undef HUGE_VAL
145 # define HUGE_VAL (1.0 / 0.0)
146 #endif
147
148
149 #if @GNULIB_ACOSF@
150 # if !@HAVE_ACOSF@
151 #  undef acosf
152 _GL_FUNCDECL_SYS (acosf, float, (float x));
153 # endif
154 _GL_CXXALIAS_SYS (acosf, float, (float x));
155 _GL_CXXALIASWARN (acosf);
156 #elif defined GNULIB_POSIXCHECK
157 # undef acosf
158 # if HAVE_RAW_DECL_ACOSF
159 _GL_WARN_ON_USE (acosf, "acosf is unportable - "
160                  "use gnulib module acosf for portability");
161 # endif
162 #endif
163
164 #if @GNULIB_ACOSL@
165 # if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@
166 #  undef acosl
167 _GL_FUNCDECL_SYS (acosl, long double, (long double x));
168 # endif
169 _GL_CXXALIAS_SYS (acosl, long double, (long double x));
170 _GL_CXXALIASWARN (acosl);
171 #elif defined GNULIB_POSIXCHECK
172 # undef acosl
173 # if HAVE_RAW_DECL_ACOSL
174 _GL_WARN_ON_USE (acosl, "acosl is unportable - "
175                  "use gnulib module mathl for portability");
176 # endif
177 #endif
178
179
180 #if @GNULIB_ASINF@
181 # if !@HAVE_ASINF@
182 #  undef asinf
183 _GL_FUNCDECL_SYS (asinf, float, (float x));
184 # endif
185 _GL_CXXALIAS_SYS (asinf, float, (float x));
186 _GL_CXXALIASWARN (asinf);
187 #elif defined GNULIB_POSIXCHECK
188 # undef asinf
189 # if HAVE_RAW_DECL_ASINF
190 _GL_WARN_ON_USE (asinf, "asinf is unportable - "
191                  "use gnulib module asinf for portability");
192 # endif
193 #endif
194
195 #if @GNULIB_ASINL@
196 # if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@
197 #  undef asinl
198 _GL_FUNCDECL_SYS (asinl, long double, (long double x));
199 # endif
200 _GL_CXXALIAS_SYS (asinl, long double, (long double x));
201 _GL_CXXALIASWARN (asinl);
202 #elif defined GNULIB_POSIXCHECK
203 # undef asinl
204 # if HAVE_RAW_DECL_ASINL
205 _GL_WARN_ON_USE (asinl, "asinl is unportable - "
206                  "use gnulib module mathl for portability");
207 # endif
208 #endif
209
210
211 #if @GNULIB_ATANF@
212 # if !@HAVE_ATANF@
213 #  undef atanf
214 _GL_FUNCDECL_SYS (atanf, float, (float x));
215 # endif
216 _GL_CXXALIAS_SYS (atanf, float, (float x));
217 _GL_CXXALIASWARN (atanf);
218 #elif defined GNULIB_POSIXCHECK
219 # undef atanf
220 # if HAVE_RAW_DECL_ATANF
221 _GL_WARN_ON_USE (atanf, "atanf is unportable - "
222                  "use gnulib module atanf for portability");
223 # endif
224 #endif
225
226 #if @GNULIB_ATANL@
227 # if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@
228 #  undef atanl
229 _GL_FUNCDECL_SYS (atanl, long double, (long double x));
230 # endif
231 _GL_CXXALIAS_SYS (atanl, long double, (long double x));
232 _GL_CXXALIASWARN (atanl);
233 #elif defined GNULIB_POSIXCHECK
234 # undef atanl
235 # if HAVE_RAW_DECL_ATANL
236 _GL_WARN_ON_USE (atanl, "atanl is unportable - "
237                  "use gnulib module mathl for portability");
238 # endif
239 #endif
240
241
242 #if @GNULIB_ATAN2F@
243 # if !@HAVE_ATAN2F@
244 #  undef atan2f
245 _GL_FUNCDECL_SYS (atan2f, float, (float y, float x));
246 # endif
247 _GL_CXXALIAS_SYS (atan2f, float, (float y, float x));
248 _GL_CXXALIASWARN (atan2f);
249 #elif defined GNULIB_POSIXCHECK
250 # undef atan2f
251 # if HAVE_RAW_DECL_ATAN2F
252 _GL_WARN_ON_USE (atan2f, "atan2f is unportable - "
253                  "use gnulib module atan2f for portability");
254 # endif
255 #endif
256
257
258 #if @GNULIB_CEILF@
259 # if @REPLACE_CEILF@
260 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
261 #   undef ceilf
262 #   define ceilf rpl_ceilf
263 #  endif
264 _GL_FUNCDECL_RPL (ceilf, float, (float x));
265 _GL_CXXALIAS_RPL (ceilf, float, (float x));
266 # else
267 #  if !@HAVE_DECL_CEILF@
268 #   undef ceilf
269 _GL_FUNCDECL_SYS (ceilf, float, (float x));
270 #  endif
271 _GL_CXXALIAS_SYS (ceilf, float, (float x));
272 # endif
273 _GL_CXXALIASWARN (ceilf);
274 #elif defined GNULIB_POSIXCHECK
275 # undef ceilf
276 # if HAVE_RAW_DECL_CEILF
277 _GL_WARN_ON_USE (ceilf, "ceilf is unportable - "
278                  "use gnulib module ceilf for portability");
279 # endif
280 #endif
281
282 #if @GNULIB_CEIL@
283 # if @REPLACE_CEIL@
284 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
285 #   define ceil rpl_ceil
286 #  endif
287 _GL_FUNCDECL_RPL (ceil, double, (double x));
288 _GL_CXXALIAS_RPL (ceil, double, (double x));
289 # else
290 _GL_CXXALIAS_SYS (ceil, double, (double x));
291 # endif
292 _GL_CXXALIASWARN (ceil);
293 #endif
294
295 #if @GNULIB_CEILL@
296 # if @REPLACE_CEILL@
297 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
298 #   undef ceill
299 #   define ceill rpl_ceill
300 #  endif
301 _GL_FUNCDECL_RPL (ceill, long double, (long double x));
302 _GL_CXXALIAS_RPL (ceill, long double, (long double x));
303 # else
304 #  if !@HAVE_DECL_CEILL@
305 #   undef ceill
306 _GL_FUNCDECL_SYS (ceill, long double, (long double x));
307 #  endif
308 _GL_CXXALIAS_SYS (ceill, long double, (long double x));
309 # endif
310 _GL_CXXALIASWARN (ceill);
311 #elif defined GNULIB_POSIXCHECK
312 # undef ceill
313 # if HAVE_RAW_DECL_CEILL
314 _GL_WARN_ON_USE (ceill, "ceill is unportable - "
315                  "use gnulib module ceill for portability");
316 # endif
317 #endif
318
319
320 #if @GNULIB_COPYSIGNF@
321 # if !@HAVE_COPYSIGNF@
322 _GL_FUNCDECL_SYS (copysignf, float, (float x, float y));
323 # endif
324 _GL_CXXALIAS_SYS (copysignf, float, (float x, float y));
325 _GL_CXXALIASWARN (copysignf);
326 #elif defined GNULIB_POSIXCHECK
327 # undef copysignf
328 # if HAVE_RAW_DECL_COPYSIGNF
329 _GL_WARN_ON_USE (copysignf, "copysignf is unportable - "
330                  "use gnulib module copysignf for portability");
331 # endif
332 #endif
333
334 #if @GNULIB_COPYSIGN@
335 # if !@HAVE_COPYSIGN@
336 _GL_FUNCDECL_SYS (copysign, double, (double x, double y));
337 # endif
338 _GL_CXXALIAS_SYS (copysign, double, (double x, double y));
339 _GL_CXXALIASWARN (copysign);
340 #elif defined GNULIB_POSIXCHECK
341 # undef copysign
342 # if HAVE_RAW_DECL_COPYSIGN
343 _GL_WARN_ON_USE (copysign, "copysign is unportable - "
344                  "use gnulib module copysign for portability");
345 # endif
346 #endif
347
348 #if @GNULIB_COPYSIGNL@
349 # if !@HAVE_COPYSIGNL@
350 _GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y));
351 # endif
352 _GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y));
353 _GL_CXXALIASWARN (copysignl);
354 #elif defined GNULIB_POSIXCHECK
355 # undef copysignl
356 # if HAVE_RAW_DECL_COPYSIGNL
357 _GL_WARN_ON_USE (copysign, "copysignl is unportable - "
358                  "use gnulib module copysignl for portability");
359 # endif
360 #endif
361
362
363 #if @GNULIB_COSF@
364 # if !@HAVE_COSF@
365 #  undef cosf
366 _GL_FUNCDECL_SYS (cosf, float, (float x));
367 # endif
368 _GL_CXXALIAS_SYS (cosf, float, (float x));
369 _GL_CXXALIASWARN (cosf);
370 #elif defined GNULIB_POSIXCHECK
371 # undef cosf
372 # if HAVE_RAW_DECL_COSF
373 _GL_WARN_ON_USE (cosf, "cosf is unportable - "
374                  "use gnulib module cosf for portability");
375 # endif
376 #endif
377
378 #if @GNULIB_COSL@
379 # if !@HAVE_COSL@ || !@HAVE_DECL_COSL@
380 #  undef cosl
381 _GL_FUNCDECL_SYS (cosl, long double, (long double x));
382 # endif
383 _GL_CXXALIAS_SYS (cosl, long double, (long double x));
384 _GL_CXXALIASWARN (cosl);
385 #elif defined GNULIB_POSIXCHECK
386 # undef cosl
387 # if HAVE_RAW_DECL_COSL
388 _GL_WARN_ON_USE (cosl, "cosl is unportable - "
389                  "use gnulib module mathl for portability");
390 # endif
391 #endif
392
393
394 #if @GNULIB_COSHF@
395 # if !@HAVE_COSHF@
396 #  undef coshf
397 _GL_FUNCDECL_SYS (coshf, float, (float x));
398 # endif
399 _GL_CXXALIAS_SYS (coshf, float, (float x));
400 _GL_CXXALIASWARN (coshf);
401 #elif defined GNULIB_POSIXCHECK
402 # undef coshf
403 # if HAVE_RAW_DECL_COSHF
404 _GL_WARN_ON_USE (coshf, "coshf is unportable - "
405                  "use gnulib module coshf for portability");
406 # endif
407 #endif
408
409
410 #if @GNULIB_EXPF@
411 # if !@HAVE_EXPF@
412 #  undef expf
413 _GL_FUNCDECL_SYS (expf, float, (float x));
414 # endif
415 _GL_CXXALIAS_SYS (expf, float, (float x));
416 _GL_CXXALIASWARN (expf);
417 #elif defined GNULIB_POSIXCHECK
418 # undef expf
419 # if HAVE_RAW_DECL_EXPF
420 _GL_WARN_ON_USE (expf, "expf is unportable - "
421                  "use gnulib module expf for portability");
422 # endif
423 #endif
424
425 #if @GNULIB_EXPL@
426 # if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@
427 #  undef expl
428 _GL_FUNCDECL_SYS (expl, long double, (long double x));
429 # endif
430 _GL_CXXALIAS_SYS (expl, long double, (long double x));
431 _GL_CXXALIASWARN (expl);
432 #elif defined GNULIB_POSIXCHECK
433 # undef expl
434 # if HAVE_RAW_DECL_EXPL
435 _GL_WARN_ON_USE (expl, "expl is unportable - "
436                  "use gnulib module mathl for portability");
437 # endif
438 #endif
439
440
441 #if @GNULIB_FABSF@
442 # if !@HAVE_FABSF@
443 #  undef fabsf
444 _GL_FUNCDECL_SYS (fabsf, float, (float x));
445 # endif
446 _GL_CXXALIAS_SYS (fabsf, float, (float x));
447 _GL_CXXALIASWARN (fabsf);
448 #elif defined GNULIB_POSIXCHECK
449 # undef fabsf
450 # if HAVE_RAW_DECL_FABSF
451 _GL_WARN_ON_USE (fabsf, "fabsf is unportable - "
452                  "use gnulib module fabsf for portability");
453 # endif
454 #endif
455
456 #if @GNULIB_FABSL@
457 # if @REPLACE_FABSL@
458 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
459 #   undef fabsl
460 #   define fabsl rpl_fabsl
461 #  endif
462 _GL_FUNCDECL_RPL (fabsl, long double, (long double x));
463 _GL_CXXALIAS_RPL (fabsl, long double, (long double x));
464 # else
465 #  if !@HAVE_FABSL@
466 #   undef fabsl
467 _GL_FUNCDECL_SYS (fabsl, long double, (long double x));
468 #  endif
469 _GL_CXXALIAS_SYS (fabsl, long double, (long double x));
470 # endif
471 _GL_CXXALIASWARN (fabsl);
472 #elif defined GNULIB_POSIXCHECK
473 # undef fabsl
474 # if HAVE_RAW_DECL_FABSL
475 _GL_WARN_ON_USE (fabsl, "fabsl is unportable - "
476                  "use gnulib module fabsl for portability");
477 # endif
478 #endif
479
480
481 #if @GNULIB_FLOORF@
482 # if @REPLACE_FLOORF@
483 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
484 #   undef floorf
485 #   define floorf rpl_floorf
486 #  endif
487 _GL_FUNCDECL_RPL (floorf, float, (float x));
488 _GL_CXXALIAS_RPL (floorf, float, (float x));
489 # else
490 #  if !@HAVE_DECL_FLOORF@
491 #   undef floorf
492 _GL_FUNCDECL_SYS (floorf, float, (float x));
493 #  endif
494 _GL_CXXALIAS_SYS (floorf, float, (float x));
495 # endif
496 _GL_CXXALIASWARN (floorf);
497 #elif defined GNULIB_POSIXCHECK
498 # undef floorf
499 # if HAVE_RAW_DECL_FLOORF
500 _GL_WARN_ON_USE (floorf, "floorf is unportable - "
501                  "use gnulib module floorf for portability");
502 # endif
503 #endif
504
505 #if @GNULIB_FLOOR@
506 # if @REPLACE_FLOOR@
507 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
508 #   define floor rpl_floor
509 #  endif
510 _GL_FUNCDECL_RPL (floor, double, (double x));
511 _GL_CXXALIAS_RPL (floor, double, (double x));
512 # else
513 _GL_CXXALIAS_SYS (floor, double, (double x));
514 # endif
515 _GL_CXXALIASWARN (floor);
516 #endif
517
518 #if @GNULIB_FLOORL@
519 # if @REPLACE_FLOORL@
520 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
521 #   undef floorl
522 #   define floorl rpl_floorl
523 #  endif
524 _GL_FUNCDECL_RPL (floorl, long double, (long double x));
525 _GL_CXXALIAS_RPL (floorl, long double, (long double x));
526 # else
527 #  if !@HAVE_DECL_FLOORL@
528 #   undef floorl
529 _GL_FUNCDECL_SYS (floorl, long double, (long double x));
530 #  endif
531 _GL_CXXALIAS_SYS (floorl, long double, (long double x));
532 # endif
533 _GL_CXXALIASWARN (floorl);
534 #elif defined GNULIB_POSIXCHECK
535 # undef floorl
536 # if HAVE_RAW_DECL_FLOORL
537 _GL_WARN_ON_USE (floorl, "floorl is unportable - "
538                  "use gnulib module floorl for portability");
539 # endif
540 #endif
541
542
543 #if @GNULIB_FMAF@
544 # if @REPLACE_FMAF@
545 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
546 #   undef fmaf
547 #   define fmaf rpl_fmaf
548 #  endif
549 _GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z));
550 _GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z));
551 # else
552 #  if !@HAVE_FMAF@
553 _GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z));
554 #  endif
555 _GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z));
556 # endif
557 _GL_CXXALIASWARN (fmaf);
558 #elif defined GNULIB_POSIXCHECK
559 # undef fmaf
560 # if HAVE_RAW_DECL_FMAF
561 _GL_WARN_ON_USE (fmaf, "fmaf is unportable - "
562                  "use gnulib module fmaf for portability");
563 # endif
564 #endif
565
566 #if @GNULIB_FMA@
567 # if @REPLACE_FMA@
568 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
569 #   undef fma
570 #   define fma rpl_fma
571 #  endif
572 _GL_FUNCDECL_RPL (fma, double, (double x, double y, double z));
573 _GL_CXXALIAS_RPL (fma, double, (double x, double y, double z));
574 # else
575 #  if !@HAVE_FMA@
576 _GL_FUNCDECL_SYS (fma, double, (double x, double y, double z));
577 #  endif
578 _GL_CXXALIAS_SYS (fma, double, (double x, double y, double z));
579 # endif
580 _GL_CXXALIASWARN (fma);
581 #elif defined GNULIB_POSIXCHECK
582 # undef fma
583 # if HAVE_RAW_DECL_FMA
584 _GL_WARN_ON_USE (fma, "fma is unportable - "
585                  "use gnulib module fma for portability");
586 # endif
587 #endif
588
589 #if @GNULIB_FMAL@
590 # if @REPLACE_FMAL@
591 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
592 #   undef fmal
593 #   define fmal rpl_fmal
594 #  endif
595 _GL_FUNCDECL_RPL (fmal, long double,
596                   (long double x, long double y, long double z));
597 _GL_CXXALIAS_RPL (fmal, long double,
598                   (long double x, long double y, long double z));
599 # else
600 #  if !@HAVE_FMAL@
601 _GL_FUNCDECL_SYS (fmal, long double,
602                   (long double x, long double y, long double z));
603 #  endif
604 _GL_CXXALIAS_SYS (fmal, long double,
605                   (long double x, long double y, long double z));
606 # endif
607 _GL_CXXALIASWARN (fmal);
608 #elif defined GNULIB_POSIXCHECK
609 # undef fmal
610 # if HAVE_RAW_DECL_FMAL
611 _GL_WARN_ON_USE (fmal, "fmal is unportable - "
612                  "use gnulib module fmal for portability");
613 # endif
614 #endif
615
616
617 #if @GNULIB_FMODF@
618 # if !@HAVE_FMODF@
619 #  undef fmodf
620 _GL_FUNCDECL_SYS (fmodf, float, (float x, float y));
621 # endif
622 _GL_CXXALIAS_SYS (fmodf, float, (float x, float y));
623 _GL_CXXALIASWARN (fmodf);
624 #elif defined GNULIB_POSIXCHECK
625 # undef fmodf
626 # if HAVE_RAW_DECL_FMODF
627 _GL_WARN_ON_USE (fmodf, "fmodf is unportable - "
628                  "use gnulib module fmodf for portability");
629 # endif
630 #endif
631
632
633 /* Write x as
634      x = mantissa * 2^exp
635    where
636      If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
637      If x is zero: mantissa = x, exp = 0.
638      If x is infinite or NaN: mantissa = x, exp unspecified.
639    Store exp in *EXPPTR and return mantissa.  */
640 #if @GNULIB_FREXPF@
641 # if @REPLACE_FREXPF@
642 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
643 #   undef frexpf
644 #   define frexpf rpl_frexpf
645 #  endif
646 _GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
647 _GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr));
648 # else
649 #  if !@HAVE_FREXPF@
650 #   undef frexpf
651 _GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
652 #  endif
653 _GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr));
654 # endif
655 _GL_CXXALIASWARN (frexpf);
656 #elif defined GNULIB_POSIXCHECK
657 # undef frexpf
658 # if HAVE_RAW_DECL_FREXPF
659 _GL_WARN_ON_USE (frexpf, "frexpf is unportable - "
660                  "use gnulib module frexpf for portability");
661 # endif
662 #endif
663
664 /* Write x as
665      x = mantissa * 2^exp
666    where
667      If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
668      If x is zero: mantissa = x, exp = 0.
669      If x is infinite or NaN: mantissa = x, exp unspecified.
670    Store exp in *EXPPTR and return mantissa.  */
671 #if @GNULIB_FREXP@
672 # if @REPLACE_FREXP@
673 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
674 #   define frexp rpl_frexp
675 #  endif
676 _GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2)));
677 _GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr));
678 # else
679 _GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr));
680 # endif
681 _GL_CXXALIASWARN (frexp);
682 #elif defined GNULIB_POSIXCHECK
683 # undef frexp
684 /* Assume frexp is always declared.  */
685 _GL_WARN_ON_USE (frexp, "frexp is unportable - "
686                  "use gnulib module frexp for portability");
687 #endif
688
689 /* Write x as
690      x = mantissa * 2^exp
691    where
692      If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
693      If x is zero: mantissa = x, exp = 0.
694      If x is infinite or NaN: mantissa = x, exp unspecified.
695    Store exp in *EXPPTR and return mantissa.  */
696 #if @GNULIB_FREXPL@ && @REPLACE_FREXPL@
697 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
698 #  undef frexpl
699 #  define frexpl rpl_frexpl
700 # endif
701 _GL_FUNCDECL_RPL (frexpl, long double,
702                   (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
703 _GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr));
704 #else
705 # if !@HAVE_DECL_FREXPL@
706 _GL_FUNCDECL_SYS (frexpl, long double,
707                   (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
708 # endif
709 # if @GNULIB_FREXPL@
710 _GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr));
711 # endif
712 #endif
713 #if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@)
714 _GL_CXXALIASWARN (frexpl);
715 #endif
716 #if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK
717 # undef frexpl
718 # if HAVE_RAW_DECL_FREXPL
719 _GL_WARN_ON_USE (frexpl, "frexpl is unportable - "
720                  "use gnulib module frexpl for portability");
721 # endif
722 #endif
723
724
725 /* Return x * 2^exp.  */
726 #if @GNULIB_LDEXPF@
727 # if !@HAVE_LDEXPF@
728 #  undef ldexpf
729 _GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp));
730 # endif
731 _GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp));
732 _GL_CXXALIASWARN (ldexpf);
733 #elif defined GNULIB_POSIXCHECK
734 # undef ldexpf
735 # if HAVE_RAW_DECL_LDEXPF
736 _GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - "
737                  "use gnulib module ldexpf for portability");
738 # endif
739 #endif
740
741 /* Return x * 2^exp.  */
742 #if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@
743 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
744 #  undef ldexpl
745 #  define ldexpl rpl_ldexpl
746 # endif
747 _GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp));
748 _GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp));
749 #else
750 # if !@HAVE_DECL_LDEXPL@
751 _GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp));
752 # endif
753 # if @GNULIB_LDEXPL@
754 _GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp));
755 # endif
756 #endif
757 #if @GNULIB_LDEXPL@
758 _GL_CXXALIASWARN (ldexpl);
759 #endif
760 #if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK
761 # undef ldexpl
762 # if HAVE_RAW_DECL_LDEXPL
763 _GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - "
764                  "use gnulib module ldexpl for portability");
765 # endif
766 #endif
767
768
769 #if @GNULIB_LOGB@
770 # if !@HAVE_DECL_LOGB@
771 _GL_EXTERN_C double logb (double x);
772 # endif
773 #elif defined GNULIB_POSIXCHECK
774 # undef logb
775 # if HAVE_RAW_DECL_LOGB
776 _GL_WARN_ON_USE (logb, "logb is unportable - "
777                  "use gnulib module logb for portability");
778 # endif
779 #endif
780
781
782 #if @GNULIB_LOGF@
783 # if !@HAVE_LOGF@
784 #  undef logf
785 _GL_FUNCDECL_SYS (logf, float, (float x));
786 # endif
787 _GL_CXXALIAS_SYS (logf, float, (float x));
788 _GL_CXXALIASWARN (logf);
789 #elif defined GNULIB_POSIXCHECK
790 # undef logf
791 # if HAVE_RAW_DECL_LOGF
792 _GL_WARN_ON_USE (logf, "logf is unportable - "
793                  "use gnulib module logf for portability");
794 # endif
795 #endif
796
797 #if @GNULIB_LOGL@
798 # if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@
799 #  undef logl
800 _GL_FUNCDECL_SYS (logl, long double, (long double x));
801 # endif
802 _GL_CXXALIAS_SYS (logl, long double, (long double x));
803 _GL_CXXALIASWARN (logl);
804 #elif defined GNULIB_POSIXCHECK
805 # undef logl
806 # if HAVE_RAW_DECL_LOGL
807 _GL_WARN_ON_USE (logl, "logl is unportable - "
808                  "use gnulib module mathl for portability");
809 # endif
810 #endif
811
812
813 #if @GNULIB_LOG10F@
814 # if !@HAVE_LOG10F@
815 #  undef log10f
816 _GL_FUNCDECL_SYS (log10f, float, (float x));
817 # endif
818 _GL_CXXALIAS_SYS (log10f, float, (float x));
819 _GL_CXXALIASWARN (log10f);
820 #elif defined GNULIB_POSIXCHECK
821 # undef log10f
822 # if HAVE_RAW_DECL_LOG10F
823 _GL_WARN_ON_USE (log10f, "log10f is unportable - "
824                  "use gnulib module log10f for portability");
825 # endif
826 #endif
827
828
829 #if @GNULIB_MODFF@
830 # if !@HAVE_MODFF@
831 #  undef modff
832 _GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
833 # endif
834 _GL_CXXALIAS_SYS (modff, float, (float x, float *iptr));
835 _GL_CXXALIASWARN (modff);
836 #elif defined GNULIB_POSIXCHECK
837 # undef modff
838 # if HAVE_RAW_DECL_MODFF
839 _GL_WARN_ON_USE (modff, "modff is unportable - "
840                  "use gnulib module modff for portability");
841 # endif
842 #endif
843
844 #if @GNULIB_MODFL@
845 # if !@HAVE_MODFL@
846 #  undef modfl
847 _GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr)
848                                       _GL_ARG_NONNULL ((2)));
849 # endif
850 _GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr));
851 _GL_CXXALIASWARN (modfl);
852 #elif defined GNULIB_POSIXCHECK
853 # undef modfl
854 # if HAVE_RAW_DECL_MODFL
855 _GL_WARN_ON_USE (modfl, "modfl is unportable - "
856                  "use gnulib module modfl for portability");
857 # endif
858 #endif
859
860
861 #if @GNULIB_POWF@
862 # if !@HAVE_POWF@
863 #  undef powf
864 _GL_FUNCDECL_SYS (powf, float, (float x, float y));
865 # endif
866 _GL_CXXALIAS_SYS (powf, float, (float x, float y));
867 _GL_CXXALIASWARN (powf);
868 #elif defined GNULIB_POSIXCHECK
869 # undef powf
870 # if HAVE_RAW_DECL_POWF
871 _GL_WARN_ON_USE (powf, "powf is unportable - "
872                  "use gnulib module powf for portability");
873 # endif
874 #endif
875
876
877 #if @GNULIB_RINTF@
878 # if !@HAVE_RINTF@
879 _GL_FUNCDECL_SYS (rintf, float, (float x));
880 # endif
881 _GL_CXXALIAS_SYS (rintf, float, (float x));
882 _GL_CXXALIASWARN (rintf);
883 #elif defined GNULIB_POSIXCHECK
884 # undef rintf
885 # if HAVE_RAW_DECL_RINTF
886 _GL_WARN_ON_USE (rintf, "rintf is unportable - "
887                  "use gnulib module rintf for portability");
888 # endif
889 #endif
890
891 #if @GNULIB_RINT@
892 # if !@HAVE_RINT@
893 _GL_FUNCDECL_SYS (rint, double, (double x));
894 # endif
895 _GL_CXXALIAS_SYS (rint, double, (double x));
896 _GL_CXXALIASWARN (rint);
897 #elif defined GNULIB_POSIXCHECK
898 # undef rint
899 # if HAVE_RAW_DECL_RINT
900 _GL_WARN_ON_USE (rint, "rint is unportable - "
901                  "use gnulib module rint for portability");
902 # endif
903 #endif
904
905 #if @GNULIB_RINTL@
906 # if !@HAVE_RINTL@
907 _GL_FUNCDECL_SYS (rintl, long double, (long double x));
908 # endif
909 _GL_CXXALIAS_SYS (rintl, long double, (long double x));
910 _GL_CXXALIASWARN (rintl);
911 #elif defined GNULIB_POSIXCHECK
912 # undef rintl
913 # if HAVE_RAW_DECL_RINTL
914 _GL_WARN_ON_USE (rintl, "rintl is unportable - "
915                  "use gnulib module rintl for portability");
916 # endif
917 #endif
918
919
920 #if @GNULIB_ROUNDF@
921 # if @REPLACE_ROUNDF@
922 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
923 #   undef roundf
924 #   define roundf rpl_roundf
925 #  endif
926 _GL_FUNCDECL_RPL (roundf, float, (float x));
927 _GL_CXXALIAS_RPL (roundf, float, (float x));
928 # else
929 #  if !@HAVE_DECL_ROUNDF@
930 _GL_FUNCDECL_SYS (roundf, float, (float x));
931 #  endif
932 _GL_CXXALIAS_SYS (roundf, float, (float x));
933 # endif
934 _GL_CXXALIASWARN (roundf);
935 #elif defined GNULIB_POSIXCHECK
936 # undef roundf
937 # if HAVE_RAW_DECL_ROUNDF
938 _GL_WARN_ON_USE (roundf, "roundf is unportable - "
939                  "use gnulib module roundf for portability");
940 # endif
941 #endif
942
943 #if @GNULIB_ROUND@
944 # if @REPLACE_ROUND@
945 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
946 #   undef round
947 #   define round rpl_round
948 #  endif
949 _GL_FUNCDECL_RPL (round, double, (double x));
950 _GL_CXXALIAS_RPL (round, double, (double x));
951 # else
952 #  if !@HAVE_DECL_ROUND@
953 _GL_FUNCDECL_SYS (round, double, (double x));
954 #  endif
955 _GL_CXXALIAS_SYS (round, double, (double x));
956 # endif
957 _GL_CXXALIASWARN (round);
958 #elif defined GNULIB_POSIXCHECK
959 # undef round
960 # if HAVE_RAW_DECL_ROUND
961 _GL_WARN_ON_USE (round, "round is unportable - "
962                  "use gnulib module round for portability");
963 # endif
964 #endif
965
966 #if @GNULIB_ROUNDL@
967 # if @REPLACE_ROUNDL@
968 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
969 #   undef roundl
970 #   define roundl rpl_roundl
971 #  endif
972 _GL_FUNCDECL_RPL (roundl, long double, (long double x));
973 _GL_CXXALIAS_RPL (roundl, long double, (long double x));
974 # else
975 #  if !@HAVE_DECL_ROUNDL@
976 _GL_FUNCDECL_SYS (roundl, long double, (long double x));
977 #  endif
978 _GL_CXXALIAS_SYS (roundl, long double, (long double x));
979 # endif
980 _GL_CXXALIASWARN (roundl);
981 #elif defined GNULIB_POSIXCHECK
982 # undef roundl
983 # if HAVE_RAW_DECL_ROUNDL
984 _GL_WARN_ON_USE (roundl, "roundl is unportable - "
985                  "use gnulib module roundl for portability");
986 # endif
987 #endif
988
989
990 #if @GNULIB_SINF@
991 # if !@HAVE_SINF@
992 #  undef sinf
993 _GL_FUNCDECL_SYS (sinf, float, (float x));
994 # endif
995 _GL_CXXALIAS_SYS (sinf, float, (float x));
996 _GL_CXXALIASWARN (sinf);
997 #elif defined GNULIB_POSIXCHECK
998 # undef sinf
999 # if HAVE_RAW_DECL_SINF
1000 _GL_WARN_ON_USE (sinf, "sinf is unportable - "
1001                  "use gnulib module sinf for portability");
1002 # endif
1003 #endif
1004
1005 #if @GNULIB_SINL@
1006 # if !@HAVE_SINL@ || !@HAVE_DECL_SINL@
1007 #  undef sinl
1008 _GL_FUNCDECL_SYS (sinl, long double, (long double x));
1009 # endif
1010 _GL_CXXALIAS_SYS (sinl, long double, (long double x));
1011 _GL_CXXALIASWARN (sinl);
1012 #elif defined GNULIB_POSIXCHECK
1013 # undef sinl
1014 # if HAVE_RAW_DECL_SINL
1015 _GL_WARN_ON_USE (sinl, "sinl is unportable - "
1016                  "use gnulib module mathl for portability");
1017 # endif
1018 #endif
1019
1020
1021 #if @GNULIB_SINHF@
1022 # if !@HAVE_SINHF@
1023 #  undef sinhf
1024 _GL_FUNCDECL_SYS (sinhf, float, (float x));
1025 # endif
1026 _GL_CXXALIAS_SYS (sinhf, float, (float x));
1027 _GL_CXXALIASWARN (sinhf);
1028 #elif defined GNULIB_POSIXCHECK
1029 # undef sinhf
1030 # if HAVE_RAW_DECL_SINHF
1031 _GL_WARN_ON_USE (sinhf, "sinhf is unportable - "
1032                  "use gnulib module sinhf for portability");
1033 # endif
1034 #endif
1035
1036
1037 #if @GNULIB_SQRTF@
1038 # if !@HAVE_SQRTF@
1039 #  undef sqrtf
1040 _GL_FUNCDECL_SYS (sqrtf, float, (float x));
1041 # endif
1042 _GL_CXXALIAS_SYS (sqrtf, float, (float x));
1043 _GL_CXXALIASWARN (sqrtf);
1044 #elif defined GNULIB_POSIXCHECK
1045 # undef sqrtf
1046 # if HAVE_RAW_DECL_SQRTF
1047 _GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - "
1048                  "use gnulib module sqrtf for portability");
1049 # endif
1050 #endif
1051
1052 #if @GNULIB_SQRTL@
1053 # if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@
1054 #  undef sqrtl
1055 _GL_FUNCDECL_SYS (sqrtl, long double, (long double x));
1056 # endif
1057 _GL_CXXALIAS_SYS (sqrtl, long double, (long double x));
1058 _GL_CXXALIASWARN (sqrtl);
1059 #elif defined GNULIB_POSIXCHECK
1060 # undef sqrtl
1061 # if HAVE_RAW_DECL_SQRTL
1062 _GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - "
1063                  "use gnulib module mathl for portability");
1064 # endif
1065 #endif
1066
1067
1068 #if @GNULIB_TANF@
1069 # if !@HAVE_TANF@
1070 #  undef tanf
1071 _GL_FUNCDECL_SYS (tanf, float, (float x));
1072 # endif
1073 _GL_CXXALIAS_SYS (tanf, float, (float x));
1074 _GL_CXXALIASWARN (tanf);
1075 #elif defined GNULIB_POSIXCHECK
1076 # undef tanf
1077 # if HAVE_RAW_DECL_TANF
1078 _GL_WARN_ON_USE (tanf, "tanf is unportable - "
1079                  "use gnulib module tanf for portability");
1080 # endif
1081 #endif
1082
1083 #if @GNULIB_TANL@
1084 # if !@HAVE_TANL@ || !@HAVE_DECL_TANL@
1085 #  undef tanl
1086 _GL_FUNCDECL_SYS (tanl, long double, (long double x));
1087 # endif
1088 _GL_CXXALIAS_SYS (tanl, long double, (long double x));
1089 _GL_CXXALIASWARN (tanl);
1090 #elif defined GNULIB_POSIXCHECK
1091 # undef tanl
1092 # if HAVE_RAW_DECL_TANL
1093 _GL_WARN_ON_USE (tanl, "tanl is unportable - "
1094                  "use gnulib module mathl for portability");
1095 # endif
1096 #endif
1097
1098
1099 #if @GNULIB_TANHF@
1100 # if !@HAVE_TANHF@
1101 #  undef tanhf
1102 _GL_FUNCDECL_SYS (tanhf, float, (float x));
1103 # endif
1104 _GL_CXXALIAS_SYS (tanhf, float, (float x));
1105 _GL_CXXALIASWARN (tanhf);
1106 #elif defined GNULIB_POSIXCHECK
1107 # undef tanhf
1108 # if HAVE_RAW_DECL_TANHF
1109 _GL_WARN_ON_USE (tanhf, "tanhf is unportable - "
1110                  "use gnulib module tanhf for portability");
1111 # endif
1112 #endif
1113
1114
1115 #if @GNULIB_TRUNCF@
1116 # if @REPLACE_TRUNCF@
1117 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1118 #   define truncf rpl_truncf
1119 #  endif
1120 _GL_FUNCDECL_RPL (truncf, float, (float x));
1121 _GL_CXXALIAS_RPL (truncf, float, (float x));
1122 # else
1123 #  if !@HAVE_DECL_TRUNCF@
1124 _GL_FUNCDECL_SYS (truncf, float, (float x));
1125 #  endif
1126 _GL_CXXALIAS_SYS (truncf, float, (float x));
1127 # endif
1128 _GL_CXXALIASWARN (truncf);
1129 #elif defined GNULIB_POSIXCHECK
1130 # undef truncf
1131 # if HAVE_RAW_DECL_TRUNCF
1132 _GL_WARN_ON_USE (truncf, "truncf is unportable - "
1133                  "use gnulib module truncf for portability");
1134 # endif
1135 #endif
1136
1137 #if @GNULIB_TRUNC@
1138 # if @REPLACE_TRUNC@
1139 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1140 #   define trunc rpl_trunc
1141 #  endif
1142 _GL_FUNCDECL_RPL (trunc, double, (double x));
1143 _GL_CXXALIAS_RPL (trunc, double, (double x));
1144 # else
1145 #  if !@HAVE_DECL_TRUNC@
1146 _GL_FUNCDECL_SYS (trunc, double, (double x));
1147 #  endif
1148 _GL_CXXALIAS_SYS (trunc, double, (double x));
1149 # endif
1150 _GL_CXXALIASWARN (trunc);
1151 #elif defined GNULIB_POSIXCHECK
1152 # undef trunc
1153 # if HAVE_RAW_DECL_TRUNC
1154 _GL_WARN_ON_USE (trunc, "trunc is unportable - "
1155                  "use gnulib module trunc for portability");
1156 # endif
1157 #endif
1158
1159 #if @GNULIB_TRUNCL@
1160 # if @REPLACE_TRUNCL@
1161 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1162 #   undef truncl
1163 #   define truncl rpl_truncl
1164 #  endif
1165 _GL_FUNCDECL_RPL (truncl, long double, (long double x));
1166 _GL_CXXALIAS_RPL (truncl, long double, (long double x));
1167 # else
1168 #  if !@HAVE_DECL_TRUNCL@
1169 _GL_FUNCDECL_SYS (truncl, long double, (long double x));
1170 #  endif
1171 _GL_CXXALIAS_SYS (truncl, long double, (long double x));
1172 # endif
1173 _GL_CXXALIASWARN (truncl);
1174 #elif defined GNULIB_POSIXCHECK
1175 # undef truncl
1176 # if HAVE_RAW_DECL_TRUNCL
1177 _GL_WARN_ON_USE (truncl, "truncl is unportable - "
1178                  "use gnulib module truncl for portability");
1179 # endif
1180 #endif
1181
1182
1183 /* Definitions of function-like macros come here, after the function
1184    declarations.  */
1185
1186
1187 #if @GNULIB_ISFINITE@
1188 # if @REPLACE_ISFINITE@
1189 _GL_EXTERN_C int gl_isfinitef (float x);
1190 _GL_EXTERN_C int gl_isfinited (double x);
1191 _GL_EXTERN_C int gl_isfinitel (long double x);
1192 #  undef isfinite
1193 #  define isfinite(x) \
1194    (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \
1195     sizeof (x) == sizeof (double) ? gl_isfinited (x) : \
1196     gl_isfinitef (x))
1197 # endif
1198 # ifdef __cplusplus
1199 #  ifdef isfinite
1200 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite)
1201 #   undef isfinite
1202 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite)
1203 #  endif
1204 # endif
1205 #elif defined GNULIB_POSIXCHECK
1206 # if defined isfinite
1207 _GL_WARN_REAL_FLOATING_DECL (isfinite);
1208 #  undef isfinite
1209 #  define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x)
1210 # endif
1211 #endif
1212
1213
1214 #if @GNULIB_ISINF@
1215 # if @REPLACE_ISINF@
1216 _GL_EXTERN_C int gl_isinff (float x);
1217 _GL_EXTERN_C int gl_isinfd (double x);
1218 _GL_EXTERN_C int gl_isinfl (long double x);
1219 #  undef isinf
1220 #  define isinf(x) \
1221    (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \
1222     sizeof (x) == sizeof (double) ? gl_isinfd (x) : \
1223     gl_isinff (x))
1224 # endif
1225 # ifdef __cplusplus
1226 #  ifdef isinf
1227 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf)
1228 #   undef isinf
1229 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf)
1230 #  endif
1231 # endif
1232 #elif defined GNULIB_POSIXCHECK
1233 # if defined isinf
1234 _GL_WARN_REAL_FLOATING_DECL (isinf);
1235 #  undef isinf
1236 #  define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x)
1237 # endif
1238 #endif
1239
1240
1241 #if @GNULIB_ISNANF@
1242 /* Test for NaN for 'float' numbers.  */
1243 # if @HAVE_ISNANF@
1244 /* The original <math.h> included above provides a declaration of isnan macro
1245    or (older) isnanf function.  */
1246 #  if __GNUC__ >= 4
1247     /* GCC 4.0 and newer provides three built-ins for isnan.  */
1248 #   undef isnanf
1249 #   define isnanf(x) __builtin_isnanf ((float)(x))
1250 #  elif defined isnan
1251 #   undef isnanf
1252 #   define isnanf(x) isnan ((float)(x))
1253 #  endif
1254 # else
1255 /* Test whether X is a NaN.  */
1256 #  undef isnanf
1257 #  define isnanf rpl_isnanf
1258 _GL_EXTERN_C int isnanf (float x);
1259 # endif
1260 #endif
1261
1262 #if @GNULIB_ISNAND@
1263 /* Test for NaN for 'double' numbers.
1264    This function is a gnulib extension, unlike isnan() which applied only
1265    to 'double' numbers earlier but now is a type-generic macro.  */
1266 # if @HAVE_ISNAND@
1267 /* The original <math.h> included above provides a declaration of isnan
1268    macro.  */
1269 #  if __GNUC__ >= 4
1270     /* GCC 4.0 and newer provides three built-ins for isnan.  */
1271 #   undef isnand
1272 #   define isnand(x) __builtin_isnan ((double)(x))
1273 #  else
1274 #   undef isnand
1275 #   define isnand(x) isnan ((double)(x))
1276 #  endif
1277 # else
1278 /* Test whether X is a NaN.  */
1279 #  undef isnand
1280 #  define isnand rpl_isnand
1281 _GL_EXTERN_C int isnand (double x);
1282 # endif
1283 #endif
1284
1285 #if @GNULIB_ISNANL@
1286 /* Test for NaN for 'long double' numbers.  */
1287 # if @HAVE_ISNANL@
1288 /* The original <math.h> included above provides a declaration of isnan
1289    macro or (older) isnanl function.  */
1290 #  if __GNUC__ >= 4
1291     /* GCC 4.0 and newer provides three built-ins for isnan.  */
1292 #   undef isnanl
1293 #   define isnanl(x) __builtin_isnanl ((long double)(x))
1294 #  elif defined isnan
1295 #   undef isnanl
1296 #   define isnanl(x) isnan ((long double)(x))
1297 #  endif
1298 # else
1299 /* Test whether X is a NaN.  */
1300 #  undef isnanl
1301 #  define isnanl rpl_isnanl
1302 _GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST;
1303 # endif
1304 #endif
1305
1306 /* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL!  */
1307 #if @GNULIB_ISNAN@
1308 # if @REPLACE_ISNAN@
1309 /* We can't just use the isnanf macro (e.g.) as exposed by
1310    isnanf.h (e.g.) here, because those may end up being macros
1311    that recursively expand back to isnan.  So use the gnulib
1312    replacements for them directly. */
1313 #  if @HAVE_ISNANF@ && __GNUC__ >= 4
1314 #   define gl_isnan_f(x) __builtin_isnanf ((float)(x))
1315 #  else
1316 _GL_EXTERN_C int rpl_isnanf (float x);
1317 #   define gl_isnan_f(x) rpl_isnanf (x)
1318 #  endif
1319 #  if @HAVE_ISNAND@ && __GNUC__ >= 4
1320 #   define gl_isnan_d(x) __builtin_isnan ((double)(x))
1321 #  else
1322 _GL_EXTERN_C int rpl_isnand (double x);
1323 #   define gl_isnan_d(x) rpl_isnand (x)
1324 #  endif
1325 #  if @HAVE_ISNANL@ && __GNUC__ >= 4
1326 #   define gl_isnan_l(x) __builtin_isnanl ((long double)(x))
1327 #  else
1328 _GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST;
1329 #   define gl_isnan_l(x) rpl_isnanl (x)
1330 #  endif
1331 #  undef isnan
1332 #  define isnan(x) \
1333    (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \
1334     sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \
1335     gl_isnan_f (x))
1336 # elif __GNUC__ >= 4
1337 #  undef isnan
1338 #  define isnan(x) \
1339    (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \
1340     sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \
1341     __builtin_isnanf ((float)(x)))
1342 # endif
1343 # ifdef __cplusplus
1344 #  ifdef isnan
1345 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan)
1346 #   undef isnan
1347 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan)
1348 #  endif
1349 # else
1350 /* Ensure isnan is a macro.  */
1351 #  ifndef isnan
1352 #   define isnan isnan
1353 #  endif
1354 # endif
1355 #elif defined GNULIB_POSIXCHECK
1356 # if defined isnan
1357 _GL_WARN_REAL_FLOATING_DECL (isnan);
1358 #  undef isnan
1359 #  define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x)
1360 # endif
1361 #endif
1362
1363
1364 #if @GNULIB_SIGNBIT@
1365 # if @REPLACE_SIGNBIT_USING_GCC@
1366 #  undef signbit
1367    /* GCC 4.0 and newer provides three built-ins for signbit.  */
1368 #  define signbit(x) \
1369    (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
1370     sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
1371     __builtin_signbitf (x))
1372 # endif
1373 # if @REPLACE_SIGNBIT@
1374 #  undef signbit
1375 _GL_EXTERN_C int gl_signbitf (float arg);
1376 _GL_EXTERN_C int gl_signbitd (double arg);
1377 _GL_EXTERN_C int gl_signbitl (long double arg);
1378 #  if __GNUC__ >= 2 && !defined __STRICT_ANSI__
1379 #   define _GL_NUM_UINT_WORDS(type) \
1380       ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
1381 #   if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf
1382 #    define gl_signbitf_OPTIMIZED_MACRO
1383 #    define gl_signbitf(arg) \
1384        ({ union { float _value;                                         \
1385                   unsigned int _word[_GL_NUM_UINT_WORDS (float)];       \
1386                 } _m;                                                   \
1387           _m._value = (arg);                                            \
1388           (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1;          \
1389         })
1390 #   endif
1391 #   if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd
1392 #    define gl_signbitd_OPTIMIZED_MACRO
1393 #    define gl_signbitd(arg) \
1394        ({ union { double _value;                                        \
1395                   unsigned int _word[_GL_NUM_UINT_WORDS (double)];      \
1396                 } _m;                                                   \
1397           _m._value = (arg);                                            \
1398           (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1;          \
1399         })
1400 #   endif
1401 #   if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl
1402 #    define gl_signbitl_OPTIMIZED_MACRO
1403 #    define gl_signbitl(arg) \
1404        ({ union { long double _value;                                   \
1405                   unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \
1406                 } _m;                                                   \
1407           _m._value = (arg);                                            \
1408           (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1;        \
1409         })
1410 #   endif
1411 #  endif
1412 #  define signbit(x) \
1413    (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \
1414     sizeof (x) == sizeof (double) ? gl_signbitd (x) : \
1415     gl_signbitf (x))
1416 # endif
1417 # ifdef __cplusplus
1418 #  ifdef signbit
1419 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit)
1420 #   undef signbit
1421 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit)
1422 #  endif
1423 # endif
1424 #elif defined GNULIB_POSIXCHECK
1425 # if defined signbit
1426 _GL_WARN_REAL_FLOATING_DECL (signbit);
1427 #  undef signbit
1428 #  define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x)
1429 # endif
1430 #endif
1431
1432
1433 #endif /* _@GUARD_PREFIX@_MATH_H */
1434 #endif /* _@GUARD_PREFIX@_MATH_H */