New module 'expm1l'.
[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_VALF
145 # define HUGE_VALF (1.0f / 0.0f)
146 # undef HUGE_VAL
147 # define HUGE_VAL (1.0 / 0.0)
148 # undef HUGE_VALL
149 # define HUGE_VALL (1.0L / 0.0L)
150 #endif
151
152 /* HUGE_VALF is a 'float' Infinity.  */
153 #ifndef HUGE_VALF
154 # if defined _MSC_VER
155 /* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f.  */
156 #  define HUGE_VALF (1e25f * 1e25f)
157 # else
158 #  define HUGE_VALF (1.0f / 0.0f)
159 # endif
160 #endif
161
162 /* HUGE_VAL is a 'double' Infinity.  */
163 #ifndef HUGE_VAL
164 # if defined _MSC_VER
165 /* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0.  */
166 #  define HUGE_VAL (1e250 * 1e250)
167 # else
168 #  define HUGE_VAL (1.0 / 0.0)
169 # endif
170 #endif
171
172 /* HUGE_VALL is a 'long double' Infinity.  */
173 #ifndef HUGE_VALL
174 # if defined _MSC_VER
175 /* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L.  */
176 #  define HUGE_VALL (1e250L * 1e250L)
177 # else
178 #  define HUGE_VALL (1.0L / 0.0L)
179 # endif
180 #endif
181
182 #if @GNULIB_ACOSF@
183 # if !@HAVE_ACOSF@
184 #  undef acosf
185 _GL_FUNCDECL_SYS (acosf, float, (float x));
186 # endif
187 _GL_CXXALIAS_SYS (acosf, float, (float x));
188 _GL_CXXALIASWARN (acosf);
189 #elif defined GNULIB_POSIXCHECK
190 # undef acosf
191 # if HAVE_RAW_DECL_ACOSF
192 _GL_WARN_ON_USE (acosf, "acosf is unportable - "
193                  "use gnulib module acosf for portability");
194 # endif
195 #endif
196
197 #if @GNULIB_ACOSL@
198 # if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@
199 #  undef acosl
200 _GL_FUNCDECL_SYS (acosl, long double, (long double x));
201 # endif
202 _GL_CXXALIAS_SYS (acosl, long double, (long double x));
203 _GL_CXXALIASWARN (acosl);
204 #elif defined GNULIB_POSIXCHECK
205 # undef acosl
206 # if HAVE_RAW_DECL_ACOSL
207 _GL_WARN_ON_USE (acosl, "acosl is unportable - "
208                  "use gnulib module acosl for portability");
209 # endif
210 #endif
211
212
213 #if @GNULIB_ASINF@
214 # if !@HAVE_ASINF@
215 #  undef asinf
216 _GL_FUNCDECL_SYS (asinf, float, (float x));
217 # endif
218 _GL_CXXALIAS_SYS (asinf, float, (float x));
219 _GL_CXXALIASWARN (asinf);
220 #elif defined GNULIB_POSIXCHECK
221 # undef asinf
222 # if HAVE_RAW_DECL_ASINF
223 _GL_WARN_ON_USE (asinf, "asinf is unportable - "
224                  "use gnulib module asinf for portability");
225 # endif
226 #endif
227
228 #if @GNULIB_ASINL@
229 # if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@
230 #  undef asinl
231 _GL_FUNCDECL_SYS (asinl, long double, (long double x));
232 # endif
233 _GL_CXXALIAS_SYS (asinl, long double, (long double x));
234 _GL_CXXALIASWARN (asinl);
235 #elif defined GNULIB_POSIXCHECK
236 # undef asinl
237 # if HAVE_RAW_DECL_ASINL
238 _GL_WARN_ON_USE (asinl, "asinl is unportable - "
239                  "use gnulib module asinl for portability");
240 # endif
241 #endif
242
243
244 #if @GNULIB_ATANF@
245 # if !@HAVE_ATANF@
246 #  undef atanf
247 _GL_FUNCDECL_SYS (atanf, float, (float x));
248 # endif
249 _GL_CXXALIAS_SYS (atanf, float, (float x));
250 _GL_CXXALIASWARN (atanf);
251 #elif defined GNULIB_POSIXCHECK
252 # undef atanf
253 # if HAVE_RAW_DECL_ATANF
254 _GL_WARN_ON_USE (atanf, "atanf is unportable - "
255                  "use gnulib module atanf for portability");
256 # endif
257 #endif
258
259 #if @GNULIB_ATANL@
260 # if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@
261 #  undef atanl
262 _GL_FUNCDECL_SYS (atanl, long double, (long double x));
263 # endif
264 _GL_CXXALIAS_SYS (atanl, long double, (long double x));
265 _GL_CXXALIASWARN (atanl);
266 #elif defined GNULIB_POSIXCHECK
267 # undef atanl
268 # if HAVE_RAW_DECL_ATANL
269 _GL_WARN_ON_USE (atanl, "atanl is unportable - "
270                  "use gnulib module atanl for portability");
271 # endif
272 #endif
273
274
275 #if @GNULIB_ATAN2F@
276 # if !@HAVE_ATAN2F@
277 #  undef atan2f
278 _GL_FUNCDECL_SYS (atan2f, float, (float y, float x));
279 # endif
280 _GL_CXXALIAS_SYS (atan2f, float, (float y, float x));
281 _GL_CXXALIASWARN (atan2f);
282 #elif defined GNULIB_POSIXCHECK
283 # undef atan2f
284 # if HAVE_RAW_DECL_ATAN2F
285 _GL_WARN_ON_USE (atan2f, "atan2f is unportable - "
286                  "use gnulib module atan2f for portability");
287 # endif
288 #endif
289
290
291 #if @GNULIB_CBRTF@
292 # if @REPLACE_CBRTF@
293 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
294 #   undef cbrtf
295 #   define cbrtf rpl_cbrtf
296 #  endif
297 _GL_FUNCDECL_RPL (cbrtf, float, (float x));
298 _GL_CXXALIAS_RPL (cbrtf, float, (float x));
299 # else
300 #  if !@HAVE_DECL_CBRTF@
301 _GL_FUNCDECL_SYS (cbrtf, float, (float x));
302 #  endif
303 _GL_CXXALIAS_SYS (cbrtf, float, (float x));
304 # endif
305 _GL_CXXALIASWARN (cbrtf);
306 #elif defined GNULIB_POSIXCHECK
307 # undef cbrtf
308 # if HAVE_RAW_DECL_CBRTF
309 _GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - "
310                  "use gnulib module cbrtf for portability");
311 # endif
312 #endif
313
314 #if @GNULIB_CBRT@
315 # if !@HAVE_CBRT@
316 _GL_FUNCDECL_SYS (cbrt, double, (double x));
317 # endif
318 _GL_CXXALIAS_SYS (cbrt, double, (double x));
319 _GL_CXXALIASWARN (cbrt);
320 #elif defined GNULIB_POSIXCHECK
321 # undef cbrt
322 # if HAVE_RAW_DECL_CBRT
323 _GL_WARN_ON_USE (cbrt, "cbrt is unportable - "
324                  "use gnulib module cbrt for portability");
325 # endif
326 #endif
327
328 #if @GNULIB_CBRTL@
329 # if @REPLACE_CBRTL@
330 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
331 #   undef cbrtl
332 #   define cbrtl rpl_cbrtl
333 #  endif
334 _GL_FUNCDECL_RPL (cbrtl, long double, (long double x));
335 _GL_CXXALIAS_RPL (cbrtl, long double, (long double x));
336 # else
337 #  if !@HAVE_DECL_CBRTL@
338 _GL_FUNCDECL_SYS (cbrtl, long double, (long double x));
339 #  endif
340 _GL_CXXALIAS_SYS (cbrtl, long double, (long double x));
341 # endif
342 _GL_CXXALIASWARN (cbrtl);
343 #elif defined GNULIB_POSIXCHECK
344 # undef cbrtl
345 # if HAVE_RAW_DECL_CBRTL
346 _GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - "
347                  "use gnulib module cbrtl for portability");
348 # endif
349 #endif
350
351
352 #if @GNULIB_CEILF@
353 # if @REPLACE_CEILF@
354 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
355 #   undef ceilf
356 #   define ceilf rpl_ceilf
357 #  endif
358 _GL_FUNCDECL_RPL (ceilf, float, (float x));
359 _GL_CXXALIAS_RPL (ceilf, float, (float x));
360 # else
361 #  if !@HAVE_DECL_CEILF@
362 #   undef ceilf
363 _GL_FUNCDECL_SYS (ceilf, float, (float x));
364 #  endif
365 _GL_CXXALIAS_SYS (ceilf, float, (float x));
366 # endif
367 _GL_CXXALIASWARN (ceilf);
368 #elif defined GNULIB_POSIXCHECK
369 # undef ceilf
370 # if HAVE_RAW_DECL_CEILF
371 _GL_WARN_ON_USE (ceilf, "ceilf is unportable - "
372                  "use gnulib module ceilf for portability");
373 # endif
374 #endif
375
376 #if @GNULIB_CEIL@
377 # if @REPLACE_CEIL@
378 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
379 #   define ceil rpl_ceil
380 #  endif
381 _GL_FUNCDECL_RPL (ceil, double, (double x));
382 _GL_CXXALIAS_RPL (ceil, double, (double x));
383 # else
384 _GL_CXXALIAS_SYS (ceil, double, (double x));
385 # endif
386 _GL_CXXALIASWARN (ceil);
387 #endif
388
389 #if @GNULIB_CEILL@
390 # if @REPLACE_CEILL@
391 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
392 #   undef ceill
393 #   define ceill rpl_ceill
394 #  endif
395 _GL_FUNCDECL_RPL (ceill, long double, (long double x));
396 _GL_CXXALIAS_RPL (ceill, long double, (long double x));
397 # else
398 #  if !@HAVE_DECL_CEILL@
399 #   undef ceill
400 _GL_FUNCDECL_SYS (ceill, long double, (long double x));
401 #  endif
402 _GL_CXXALIAS_SYS (ceill, long double, (long double x));
403 # endif
404 _GL_CXXALIASWARN (ceill);
405 #elif defined GNULIB_POSIXCHECK
406 # undef ceill
407 # if HAVE_RAW_DECL_CEILL
408 _GL_WARN_ON_USE (ceill, "ceill is unportable - "
409                  "use gnulib module ceill for portability");
410 # endif
411 #endif
412
413
414 #if @GNULIB_COPYSIGNF@
415 # if !@HAVE_COPYSIGNF@
416 _GL_FUNCDECL_SYS (copysignf, float, (float x, float y));
417 # endif
418 _GL_CXXALIAS_SYS (copysignf, float, (float x, float y));
419 _GL_CXXALIASWARN (copysignf);
420 #elif defined GNULIB_POSIXCHECK
421 # undef copysignf
422 # if HAVE_RAW_DECL_COPYSIGNF
423 _GL_WARN_ON_USE (copysignf, "copysignf is unportable - "
424                  "use gnulib module copysignf for portability");
425 # endif
426 #endif
427
428 #if @GNULIB_COPYSIGN@
429 # if !@HAVE_COPYSIGN@
430 _GL_FUNCDECL_SYS (copysign, double, (double x, double y));
431 # endif
432 _GL_CXXALIAS_SYS (copysign, double, (double x, double y));
433 _GL_CXXALIASWARN (copysign);
434 #elif defined GNULIB_POSIXCHECK
435 # undef copysign
436 # if HAVE_RAW_DECL_COPYSIGN
437 _GL_WARN_ON_USE (copysign, "copysign is unportable - "
438                  "use gnulib module copysign for portability");
439 # endif
440 #endif
441
442 #if @GNULIB_COPYSIGNL@
443 # if !@HAVE_COPYSIGNL@
444 _GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y));
445 # endif
446 _GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y));
447 _GL_CXXALIASWARN (copysignl);
448 #elif defined GNULIB_POSIXCHECK
449 # undef copysignl
450 # if HAVE_RAW_DECL_COPYSIGNL
451 _GL_WARN_ON_USE (copysign, "copysignl is unportable - "
452                  "use gnulib module copysignl for portability");
453 # endif
454 #endif
455
456
457 #if @GNULIB_COSF@
458 # if !@HAVE_COSF@
459 #  undef cosf
460 _GL_FUNCDECL_SYS (cosf, float, (float x));
461 # endif
462 _GL_CXXALIAS_SYS (cosf, float, (float x));
463 _GL_CXXALIASWARN (cosf);
464 #elif defined GNULIB_POSIXCHECK
465 # undef cosf
466 # if HAVE_RAW_DECL_COSF
467 _GL_WARN_ON_USE (cosf, "cosf is unportable - "
468                  "use gnulib module cosf for portability");
469 # endif
470 #endif
471
472 #if @GNULIB_COSL@
473 # if !@HAVE_COSL@ || !@HAVE_DECL_COSL@
474 #  undef cosl
475 _GL_FUNCDECL_SYS (cosl, long double, (long double x));
476 # endif
477 _GL_CXXALIAS_SYS (cosl, long double, (long double x));
478 _GL_CXXALIASWARN (cosl);
479 #elif defined GNULIB_POSIXCHECK
480 # undef cosl
481 # if HAVE_RAW_DECL_COSL
482 _GL_WARN_ON_USE (cosl, "cosl is unportable - "
483                  "use gnulib module cosl for portability");
484 # endif
485 #endif
486
487
488 #if @GNULIB_COSHF@
489 # if !@HAVE_COSHF@
490 #  undef coshf
491 _GL_FUNCDECL_SYS (coshf, float, (float x));
492 # endif
493 _GL_CXXALIAS_SYS (coshf, float, (float x));
494 _GL_CXXALIASWARN (coshf);
495 #elif defined GNULIB_POSIXCHECK
496 # undef coshf
497 # if HAVE_RAW_DECL_COSHF
498 _GL_WARN_ON_USE (coshf, "coshf is unportable - "
499                  "use gnulib module coshf for portability");
500 # endif
501 #endif
502
503
504 #if @GNULIB_EXPF@
505 # if !@HAVE_EXPF@
506 #  undef expf
507 _GL_FUNCDECL_SYS (expf, float, (float x));
508 # endif
509 _GL_CXXALIAS_SYS (expf, float, (float x));
510 _GL_CXXALIASWARN (expf);
511 #elif defined GNULIB_POSIXCHECK
512 # undef expf
513 # if HAVE_RAW_DECL_EXPF
514 _GL_WARN_ON_USE (expf, "expf is unportable - "
515                  "use gnulib module expf for portability");
516 # endif
517 #endif
518
519 #if @GNULIB_EXPL@
520 # if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@
521 #  undef expl
522 _GL_FUNCDECL_SYS (expl, long double, (long double x));
523 # endif
524 _GL_CXXALIAS_SYS (expl, long double, (long double x));
525 _GL_CXXALIASWARN (expl);
526 #elif defined GNULIB_POSIXCHECK
527 # undef expl
528 # if HAVE_RAW_DECL_EXPL
529 _GL_WARN_ON_USE (expl, "expl is unportable - "
530                  "use gnulib module expl for portability");
531 # endif
532 #endif
533
534
535 #if @GNULIB_EXPM1F@
536 # if !@HAVE_EXPM1F@
537 _GL_FUNCDECL_SYS (expm1f, float, (float x));
538 # endif
539 _GL_CXXALIAS_SYS (expm1f, float, (float x));
540 _GL_CXXALIASWARN (expm1f);
541 #elif defined GNULIB_POSIXCHECK
542 # undef expm1f
543 # if HAVE_RAW_DECL_EXPM1F
544 _GL_WARN_ON_USE (expm1f, "expm1f is unportable - "
545                  "use gnulib module expm1f for portability");
546 # endif
547 #endif
548
549 #if @GNULIB_EXPM1@
550 # if !@HAVE_EXPM1@
551 _GL_FUNCDECL_SYS (expm1, double, (double x));
552 # endif
553 _GL_CXXALIAS_SYS (expm1, double, (double x));
554 _GL_CXXALIASWARN (expm1);
555 #elif defined GNULIB_POSIXCHECK
556 # undef expm1
557 # if HAVE_RAW_DECL_EXPM1
558 _GL_WARN_ON_USE (expm1, "expm1 is unportable - "
559                  "use gnulib module expm1 for portability");
560 # endif
561 #endif
562
563 #if @GNULIB_EXPM1L@
564 # if !@HAVE_EXPM1L@
565 _GL_FUNCDECL_SYS (expm1l, long double, (long double x));
566 # endif
567 _GL_CXXALIAS_SYS (expm1l, long double, (long double x));
568 _GL_CXXALIASWARN (expm1l);
569 #elif defined GNULIB_POSIXCHECK
570 # undef expm1l
571 # if HAVE_RAW_DECL_EXPM1L
572 _GL_WARN_ON_USE (expm1l, "expm1l is unportable - "
573                  "use gnulib module expm1l for portability");
574 # endif
575 #endif
576
577
578 #if @GNULIB_FABSF@
579 # if !@HAVE_FABSF@
580 #  undef fabsf
581 _GL_FUNCDECL_SYS (fabsf, float, (float x));
582 # endif
583 _GL_CXXALIAS_SYS (fabsf, float, (float x));
584 _GL_CXXALIASWARN (fabsf);
585 #elif defined GNULIB_POSIXCHECK
586 # undef fabsf
587 # if HAVE_RAW_DECL_FABSF
588 _GL_WARN_ON_USE (fabsf, "fabsf is unportable - "
589                  "use gnulib module fabsf for portability");
590 # endif
591 #endif
592
593 #if @GNULIB_FABSL@
594 # if @REPLACE_FABSL@
595 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
596 #   undef fabsl
597 #   define fabsl rpl_fabsl
598 #  endif
599 _GL_FUNCDECL_RPL (fabsl, long double, (long double x));
600 _GL_CXXALIAS_RPL (fabsl, long double, (long double x));
601 # else
602 #  if !@HAVE_FABSL@
603 #   undef fabsl
604 _GL_FUNCDECL_SYS (fabsl, long double, (long double x));
605 #  endif
606 _GL_CXXALIAS_SYS (fabsl, long double, (long double x));
607 # endif
608 _GL_CXXALIASWARN (fabsl);
609 #elif defined GNULIB_POSIXCHECK
610 # undef fabsl
611 # if HAVE_RAW_DECL_FABSL
612 _GL_WARN_ON_USE (fabsl, "fabsl is unportable - "
613                  "use gnulib module fabsl for portability");
614 # endif
615 #endif
616
617
618 #if @GNULIB_FLOORF@
619 # if @REPLACE_FLOORF@
620 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
621 #   undef floorf
622 #   define floorf rpl_floorf
623 #  endif
624 _GL_FUNCDECL_RPL (floorf, float, (float x));
625 _GL_CXXALIAS_RPL (floorf, float, (float x));
626 # else
627 #  if !@HAVE_DECL_FLOORF@
628 #   undef floorf
629 _GL_FUNCDECL_SYS (floorf, float, (float x));
630 #  endif
631 _GL_CXXALIAS_SYS (floorf, float, (float x));
632 # endif
633 _GL_CXXALIASWARN (floorf);
634 #elif defined GNULIB_POSIXCHECK
635 # undef floorf
636 # if HAVE_RAW_DECL_FLOORF
637 _GL_WARN_ON_USE (floorf, "floorf is unportable - "
638                  "use gnulib module floorf for portability");
639 # endif
640 #endif
641
642 #if @GNULIB_FLOOR@
643 # if @REPLACE_FLOOR@
644 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
645 #   define floor rpl_floor
646 #  endif
647 _GL_FUNCDECL_RPL (floor, double, (double x));
648 _GL_CXXALIAS_RPL (floor, double, (double x));
649 # else
650 _GL_CXXALIAS_SYS (floor, double, (double x));
651 # endif
652 _GL_CXXALIASWARN (floor);
653 #endif
654
655 #if @GNULIB_FLOORL@
656 # if @REPLACE_FLOORL@
657 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
658 #   undef floorl
659 #   define floorl rpl_floorl
660 #  endif
661 _GL_FUNCDECL_RPL (floorl, long double, (long double x));
662 _GL_CXXALIAS_RPL (floorl, long double, (long double x));
663 # else
664 #  if !@HAVE_DECL_FLOORL@
665 #   undef floorl
666 _GL_FUNCDECL_SYS (floorl, long double, (long double x));
667 #  endif
668 _GL_CXXALIAS_SYS (floorl, long double, (long double x));
669 # endif
670 _GL_CXXALIASWARN (floorl);
671 #elif defined GNULIB_POSIXCHECK
672 # undef floorl
673 # if HAVE_RAW_DECL_FLOORL
674 _GL_WARN_ON_USE (floorl, "floorl is unportable - "
675                  "use gnulib module floorl for portability");
676 # endif
677 #endif
678
679
680 #if @GNULIB_FMAF@
681 # if @REPLACE_FMAF@
682 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
683 #   undef fmaf
684 #   define fmaf rpl_fmaf
685 #  endif
686 _GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z));
687 _GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z));
688 # else
689 #  if !@HAVE_FMAF@
690 _GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z));
691 #  endif
692 _GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z));
693 # endif
694 _GL_CXXALIASWARN (fmaf);
695 #elif defined GNULIB_POSIXCHECK
696 # undef fmaf
697 # if HAVE_RAW_DECL_FMAF
698 _GL_WARN_ON_USE (fmaf, "fmaf is unportable - "
699                  "use gnulib module fmaf for portability");
700 # endif
701 #endif
702
703 #if @GNULIB_FMA@
704 # if @REPLACE_FMA@
705 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
706 #   undef fma
707 #   define fma rpl_fma
708 #  endif
709 _GL_FUNCDECL_RPL (fma, double, (double x, double y, double z));
710 _GL_CXXALIAS_RPL (fma, double, (double x, double y, double z));
711 # else
712 #  if !@HAVE_FMA@
713 _GL_FUNCDECL_SYS (fma, double, (double x, double y, double z));
714 #  endif
715 _GL_CXXALIAS_SYS (fma, double, (double x, double y, double z));
716 # endif
717 _GL_CXXALIASWARN (fma);
718 #elif defined GNULIB_POSIXCHECK
719 # undef fma
720 # if HAVE_RAW_DECL_FMA
721 _GL_WARN_ON_USE (fma, "fma is unportable - "
722                  "use gnulib module fma for portability");
723 # endif
724 #endif
725
726 #if @GNULIB_FMAL@
727 # if @REPLACE_FMAL@
728 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
729 #   undef fmal
730 #   define fmal rpl_fmal
731 #  endif
732 _GL_FUNCDECL_RPL (fmal, long double,
733                   (long double x, long double y, long double z));
734 _GL_CXXALIAS_RPL (fmal, long double,
735                   (long double x, long double y, long double z));
736 # else
737 #  if !@HAVE_FMAL@
738 _GL_FUNCDECL_SYS (fmal, long double,
739                   (long double x, long double y, long double z));
740 #  endif
741 _GL_CXXALIAS_SYS (fmal, long double,
742                   (long double x, long double y, long double z));
743 # endif
744 _GL_CXXALIASWARN (fmal);
745 #elif defined GNULIB_POSIXCHECK
746 # undef fmal
747 # if HAVE_RAW_DECL_FMAL
748 _GL_WARN_ON_USE (fmal, "fmal is unportable - "
749                  "use gnulib module fmal for portability");
750 # endif
751 #endif
752
753
754 #if @GNULIB_FMODF@
755 # if @REPLACE_FMODF@
756 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
757 #   undef fmodf
758 #   define fmodf rpl_fmodf
759 #  endif
760 _GL_FUNCDECL_RPL (fmodf, float, (float x, float y));
761 _GL_CXXALIAS_RPL (fmodf, float, (float x, float y));
762 # else
763 #  if !@HAVE_FMODF@
764 #   undef fmodf
765 _GL_FUNCDECL_SYS (fmodf, float, (float x, float y));
766 #  endif
767 _GL_CXXALIAS_SYS (fmodf, float, (float x, float y));
768 # endif
769 _GL_CXXALIASWARN (fmodf);
770 #elif defined GNULIB_POSIXCHECK
771 # undef fmodf
772 # if HAVE_RAW_DECL_FMODF
773 _GL_WARN_ON_USE (fmodf, "fmodf is unportable - "
774                  "use gnulib module fmodf for portability");
775 # endif
776 #endif
777
778 #if @GNULIB_FMOD@
779 # if @REPLACE_FMOD@
780 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
781 #   undef fmod
782 #   define fmod rpl_fmod
783 #  endif
784 _GL_FUNCDECL_RPL (fmod, double, (double x, double y));
785 _GL_CXXALIAS_RPL (fmod, double, (double x, double y));
786 # else
787 _GL_CXXALIAS_SYS (fmod, double, (double x, double y));
788 # endif
789 _GL_CXXALIASWARN (fmod);
790 #elif defined GNULIB_POSIXCHECK
791 # undef fmod
792 # if HAVE_RAW_DECL_FMOD
793 _GL_WARN_ON_USE (fmod, "fmod has portability problems - "
794                  "use gnulib module fmod for portability");
795 # endif
796 #endif
797
798 #if @GNULIB_FMODL@
799 # if @REPLACE_FMODL@
800 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
801 #   undef fmodl
802 #   define fmodl rpl_fmodl
803 #  endif
804 _GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y));
805 _GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y));
806 # else
807 #  if !@HAVE_FMODL@
808 #   undef fmodl
809 _GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y));
810 #  endif
811 _GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y));
812 # endif
813 _GL_CXXALIASWARN (fmodl);
814 #elif defined GNULIB_POSIXCHECK
815 # undef fmodl
816 # if HAVE_RAW_DECL_FMODL
817 _GL_WARN_ON_USE (fmodl, "fmodl is unportable - "
818                  "use gnulib module fmodl for portability");
819 # endif
820 #endif
821
822
823 /* Write x as
824      x = mantissa * 2^exp
825    where
826      If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
827      If x is zero: mantissa = x, exp = 0.
828      If x is infinite or NaN: mantissa = x, exp unspecified.
829    Store exp in *EXPPTR and return mantissa.  */
830 #if @GNULIB_FREXPF@
831 # if @REPLACE_FREXPF@
832 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
833 #   undef frexpf
834 #   define frexpf rpl_frexpf
835 #  endif
836 _GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
837 _GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr));
838 # else
839 #  if !@HAVE_FREXPF@
840 #   undef frexpf
841 _GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
842 #  endif
843 _GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr));
844 # endif
845 _GL_CXXALIASWARN (frexpf);
846 #elif defined GNULIB_POSIXCHECK
847 # undef frexpf
848 # if HAVE_RAW_DECL_FREXPF
849 _GL_WARN_ON_USE (frexpf, "frexpf is unportable - "
850                  "use gnulib module frexpf for portability");
851 # endif
852 #endif
853
854 /* Write x as
855      x = mantissa * 2^exp
856    where
857      If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
858      If x is zero: mantissa = x, exp = 0.
859      If x is infinite or NaN: mantissa = x, exp unspecified.
860    Store exp in *EXPPTR and return mantissa.  */
861 #if @GNULIB_FREXP@
862 # if @REPLACE_FREXP@
863 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
864 #   define frexp rpl_frexp
865 #  endif
866 _GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2)));
867 _GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr));
868 # else
869 _GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr));
870 # endif
871 _GL_CXXALIASWARN (frexp);
872 #elif defined GNULIB_POSIXCHECK
873 # undef frexp
874 /* Assume frexp is always declared.  */
875 _GL_WARN_ON_USE (frexp, "frexp is unportable - "
876                  "use gnulib module frexp for portability");
877 #endif
878
879 /* Write x as
880      x = mantissa * 2^exp
881    where
882      If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
883      If x is zero: mantissa = x, exp = 0.
884      If x is infinite or NaN: mantissa = x, exp unspecified.
885    Store exp in *EXPPTR and return mantissa.  */
886 #if @GNULIB_FREXPL@ && @REPLACE_FREXPL@
887 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
888 #  undef frexpl
889 #  define frexpl rpl_frexpl
890 # endif
891 _GL_FUNCDECL_RPL (frexpl, long double,
892                   (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
893 _GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr));
894 #else
895 # if !@HAVE_DECL_FREXPL@
896 _GL_FUNCDECL_SYS (frexpl, long double,
897                   (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
898 # endif
899 # if @GNULIB_FREXPL@
900 _GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr));
901 # endif
902 #endif
903 #if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@)
904 _GL_CXXALIASWARN (frexpl);
905 #endif
906 #if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK
907 # undef frexpl
908 # if HAVE_RAW_DECL_FREXPL
909 _GL_WARN_ON_USE (frexpl, "frexpl is unportable - "
910                  "use gnulib module frexpl for portability");
911 # endif
912 #endif
913
914
915 /* Return sqrt(x^2+y^2).  */
916 #if @GNULIB_HYPOTF@
917 # if @REPLACE_HYPOTF@
918 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
919 #   undef hypotf
920 #   define hypotf rpl_hypotf
921 #  endif
922 _GL_FUNCDECL_RPL (hypotf, float, (float x, float y));
923 _GL_CXXALIAS_RPL (hypotf, float, (float x, float y));
924 # else
925 #  if !@HAVE_HYPOTF@
926 _GL_FUNCDECL_SYS (hypotf, float, (float x, float y));
927 #  endif
928 _GL_CXXALIAS_SYS (hypotf, float, (float x, float y));
929 # endif
930 _GL_CXXALIASWARN (hypotf);
931 #elif defined GNULIB_POSIXCHECK
932 # undef hypotf
933 # if HAVE_RAW_DECL_HYPOTF
934 _GL_WARN_ON_USE (hypotf, "hypotf is unportable - "
935                  "use gnulib module hypotf for portability");
936 # endif
937 #endif
938
939 /* Return sqrt(x^2+y^2).  */
940 #if @GNULIB_HYPOT@
941 # if @REPLACE_HYPOT@
942 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
943 #   undef hypot
944 #   define hypot rpl_hypot
945 #  endif
946 _GL_FUNCDECL_RPL (hypot, double, (double x, double y));
947 _GL_CXXALIAS_RPL (hypot, double, (double x, double y));
948 # else
949 _GL_CXXALIAS_SYS (hypot, double, (double x, double y));
950 # endif
951 _GL_CXXALIASWARN (hypot);
952 #elif defined GNULIB_POSIXCHECK
953 # undef hypot
954 # if HAVE_RAW_DECL_HYPOT
955 _GL_WARN_ON_USE (hypotf, "hypot has portability problems - "
956                  "use gnulib module hypot for portability");
957 # endif
958 #endif
959
960 /* Return sqrt(x^2+y^2).  */
961 #if @GNULIB_HYPOTL@
962 # if @REPLACE_HYPOTL@
963 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
964 #   undef hypotl
965 #   define hypotl rpl_hypotl
966 #  endif
967 _GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y));
968 _GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y));
969 # else
970 #  if !@HAVE_HYPOTL@
971 _GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y));
972 #  endif
973 _GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y));
974 # endif
975 _GL_CXXALIASWARN (hypotl);
976 #elif defined GNULIB_POSIXCHECK
977 # undef hypotl
978 # if HAVE_RAW_DECL_HYPOTL
979 _GL_WARN_ON_USE (hypotl, "hypotl is unportable - "
980                  "use gnulib module hypotl for portability");
981 # endif
982 #endif
983
984
985 /* Return x * 2^exp.  */
986 #if @GNULIB_LDEXPF@
987 # if !@HAVE_LDEXPF@
988 #  undef ldexpf
989 _GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp));
990 # endif
991 _GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp));
992 _GL_CXXALIASWARN (ldexpf);
993 #elif defined GNULIB_POSIXCHECK
994 # undef ldexpf
995 # if HAVE_RAW_DECL_LDEXPF
996 _GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - "
997                  "use gnulib module ldexpf for portability");
998 # endif
999 #endif
1000
1001 /* Return x * 2^exp.  */
1002 #if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@
1003 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1004 #  undef ldexpl
1005 #  define ldexpl rpl_ldexpl
1006 # endif
1007 _GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp));
1008 _GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp));
1009 #else
1010 # if !@HAVE_DECL_LDEXPL@
1011 _GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp));
1012 # endif
1013 # if @GNULIB_LDEXPL@
1014 _GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp));
1015 # endif
1016 #endif
1017 #if @GNULIB_LDEXPL@
1018 _GL_CXXALIASWARN (ldexpl);
1019 #endif
1020 #if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK
1021 # undef ldexpl
1022 # if HAVE_RAW_DECL_LDEXPL
1023 _GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - "
1024                  "use gnulib module ldexpl for portability");
1025 # endif
1026 #endif
1027
1028
1029 #if @GNULIB_LOGB@
1030 # if !@HAVE_DECL_LOGB@
1031 _GL_EXTERN_C double logb (double x);
1032 # endif
1033 #elif defined GNULIB_POSIXCHECK
1034 # undef logb
1035 # if HAVE_RAW_DECL_LOGB
1036 _GL_WARN_ON_USE (logb, "logb is unportable - "
1037                  "use gnulib module logb for portability");
1038 # endif
1039 #endif
1040
1041
1042 #if @GNULIB_LOGF@
1043 # if !@HAVE_LOGF@
1044 #  undef logf
1045 _GL_FUNCDECL_SYS (logf, float, (float x));
1046 # endif
1047 _GL_CXXALIAS_SYS (logf, float, (float x));
1048 _GL_CXXALIASWARN (logf);
1049 #elif defined GNULIB_POSIXCHECK
1050 # undef logf
1051 # if HAVE_RAW_DECL_LOGF
1052 _GL_WARN_ON_USE (logf, "logf is unportable - "
1053                  "use gnulib module logf for portability");
1054 # endif
1055 #endif
1056
1057 #if @GNULIB_LOGL@
1058 # if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@
1059 #  undef logl
1060 _GL_FUNCDECL_SYS (logl, long double, (long double x));
1061 # endif
1062 _GL_CXXALIAS_SYS (logl, long double, (long double x));
1063 _GL_CXXALIASWARN (logl);
1064 #elif defined GNULIB_POSIXCHECK
1065 # undef logl
1066 # if HAVE_RAW_DECL_LOGL
1067 _GL_WARN_ON_USE (logl, "logl is unportable - "
1068                  "use gnulib module logl for portability");
1069 # endif
1070 #endif
1071
1072
1073 #if @GNULIB_LOG10F@
1074 # if !@HAVE_LOG10F@
1075 #  undef log10f
1076 _GL_FUNCDECL_SYS (log10f, float, (float x));
1077 # endif
1078 _GL_CXXALIAS_SYS (log10f, float, (float x));
1079 _GL_CXXALIASWARN (log10f);
1080 #elif defined GNULIB_POSIXCHECK
1081 # undef log10f
1082 # if HAVE_RAW_DECL_LOG10F
1083 _GL_WARN_ON_USE (log10f, "log10f is unportable - "
1084                  "use gnulib module log10f for portability");
1085 # endif
1086 #endif
1087
1088 #if @GNULIB_LOG10L@
1089 # if !@HAVE_LOG10L@ || !@HAVE_DECL_LOG10L@
1090 #  undef log10l
1091 _GL_FUNCDECL_SYS (log10l, long double, (long double x));
1092 # endif
1093 _GL_CXXALIAS_SYS (log10l, long double, (long double x));
1094 _GL_CXXALIASWARN (log10l);
1095 #elif defined GNULIB_POSIXCHECK
1096 # undef log10l
1097 # if HAVE_RAW_DECL_LOG10L
1098 _GL_WARN_ON_USE (log10l, "log10l is unportable - "
1099                  "use gnulib module log10l for portability");
1100 # endif
1101 #endif
1102
1103
1104 #if @GNULIB_MODFF@
1105 # if @REPLACE_MODFF@
1106 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1107 #   undef modff
1108 #   define modff rpl_modff
1109 #  endif
1110 _GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
1111 _GL_CXXALIAS_RPL (modff, float, (float x, float *iptr));
1112 # else
1113 #  if !@HAVE_MODFF@
1114 #   undef modff
1115 _GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
1116 #  endif
1117 _GL_CXXALIAS_SYS (modff, float, (float x, float *iptr));
1118 # endif
1119 _GL_CXXALIASWARN (modff);
1120 #elif defined GNULIB_POSIXCHECK
1121 # undef modff
1122 # if HAVE_RAW_DECL_MODFF
1123 _GL_WARN_ON_USE (modff, "modff is unportable - "
1124                  "use gnulib module modff for portability");
1125 # endif
1126 #endif
1127
1128 #if @GNULIB_MODF@
1129 # if @REPLACE_MODF@
1130 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1131 #   undef modf
1132 #   define modf rpl_modf
1133 #  endif
1134 _GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2)));
1135 _GL_CXXALIAS_RPL (modf, double, (double x, double *iptr));
1136 # else
1137 _GL_CXXALIAS_SYS (modf, double, (double x, double *iptr));
1138 # endif
1139 _GL_CXXALIASWARN (modf);
1140 #elif defined GNULIB_POSIXCHECK
1141 # undef modf
1142 # if HAVE_RAW_DECL_MODF
1143 _GL_WARN_ON_USE (modf, "modf has portability problems - "
1144                  "use gnulib module modf for portability");
1145 # endif
1146 #endif
1147
1148 #if @GNULIB_MODFL@
1149 # if @REPLACE_MODFL@
1150 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1151 #   undef modfl
1152 #   define modfl rpl_modfl
1153 #  endif
1154 _GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr)
1155                                       _GL_ARG_NONNULL ((2)));
1156 _GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr));
1157 # else
1158 #  if !@HAVE_MODFL@
1159 #   undef modfl
1160 _GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr)
1161                                       _GL_ARG_NONNULL ((2)));
1162 #  endif
1163 _GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr));
1164 # endif
1165 _GL_CXXALIASWARN (modfl);
1166 #elif defined GNULIB_POSIXCHECK
1167 # undef modfl
1168 # if HAVE_RAW_DECL_MODFL
1169 _GL_WARN_ON_USE (modfl, "modfl is unportable - "
1170                  "use gnulib module modfl for portability");
1171 # endif
1172 #endif
1173
1174
1175 #if @GNULIB_POWF@
1176 # if !@HAVE_POWF@
1177 #  undef powf
1178 _GL_FUNCDECL_SYS (powf, float, (float x, float y));
1179 # endif
1180 _GL_CXXALIAS_SYS (powf, float, (float x, float y));
1181 _GL_CXXALIASWARN (powf);
1182 #elif defined GNULIB_POSIXCHECK
1183 # undef powf
1184 # if HAVE_RAW_DECL_POWF
1185 _GL_WARN_ON_USE (powf, "powf is unportable - "
1186                  "use gnulib module powf for portability");
1187 # endif
1188 #endif
1189
1190
1191 #if @GNULIB_REMAINDERF@
1192 # if @REPLACE_REMAINDERF@
1193 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1194 #   undef remainderf
1195 #   define remainderf rpl_remainderf
1196 #  endif
1197 _GL_FUNCDECL_RPL (remainderf, float, (float x, float y));
1198 _GL_CXXALIAS_RPL (remainderf, float, (float x, float y));
1199 # else
1200 #  if !@HAVE_REMAINDERF@
1201 _GL_FUNCDECL_SYS (remainderf, float, (float x, float y));
1202 #  endif
1203 _GL_CXXALIAS_SYS (remainderf, float, (float x, float y));
1204 # endif
1205 _GL_CXXALIASWARN (remainderf);
1206 #elif defined GNULIB_POSIXCHECK
1207 # undef remainderf
1208 # if HAVE_RAW_DECL_REMAINDERF
1209 _GL_WARN_ON_USE (remainderf, "remainderf is unportable - "
1210                  "use gnulib module remainderf for portability");
1211 # endif
1212 #endif
1213
1214 #if @GNULIB_REMAINDER@
1215 # if @REPLACE_REMAINDER@
1216 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1217 #   undef remainder
1218 #   define remainder rpl_remainder
1219 #  endif
1220 _GL_FUNCDECL_RPL (remainder, double, (double x, double y));
1221 _GL_CXXALIAS_RPL (remainder, double, (double x, double y));
1222 # else
1223 #  if !@HAVE_REMAINDER@ || !@HAVE_DECL_REMAINDER@
1224 _GL_FUNCDECL_SYS (remainder, double, (double x, double y));
1225 #  endif
1226 _GL_CXXALIAS_SYS (remainder, double, (double x, double y));
1227 # endif
1228 _GL_CXXALIASWARN (remainder);
1229 #elif defined GNULIB_POSIXCHECK
1230 # undef remainder
1231 # if HAVE_RAW_DECL_REMAINDER
1232 _GL_WARN_ON_USE (remainder, "remainder is unportable - "
1233                  "use gnulib module remainder for portability");
1234 # endif
1235 #endif
1236
1237 #if @GNULIB_REMAINDERL@
1238 # if @REPLACE_REMAINDERL@
1239 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1240 #   undef remainderl
1241 #   define remainderl rpl_remainderl
1242 #  endif
1243 _GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y));
1244 _GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y));
1245 # else
1246 #  if !@HAVE_REMAINDERL@
1247 _GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y));
1248 #  endif
1249 _GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y));
1250 # endif
1251 _GL_CXXALIASWARN (remainderl);
1252 #elif defined GNULIB_POSIXCHECK
1253 # undef remainderl
1254 # if HAVE_RAW_DECL_REMAINDERL
1255 _GL_WARN_ON_USE (remainderl, "remainderl is unportable - "
1256                  "use gnulib module remainderl for portability");
1257 # endif
1258 #endif
1259
1260
1261 #if @GNULIB_RINTF@
1262 # if !@HAVE_RINTF@
1263 _GL_FUNCDECL_SYS (rintf, float, (float x));
1264 # endif
1265 _GL_CXXALIAS_SYS (rintf, float, (float x));
1266 _GL_CXXALIASWARN (rintf);
1267 #elif defined GNULIB_POSIXCHECK
1268 # undef rintf
1269 # if HAVE_RAW_DECL_RINTF
1270 _GL_WARN_ON_USE (rintf, "rintf is unportable - "
1271                  "use gnulib module rintf for portability");
1272 # endif
1273 #endif
1274
1275 #if @GNULIB_RINT@
1276 # if !@HAVE_RINT@
1277 _GL_FUNCDECL_SYS (rint, double, (double x));
1278 # endif
1279 _GL_CXXALIAS_SYS (rint, double, (double x));
1280 _GL_CXXALIASWARN (rint);
1281 #elif defined GNULIB_POSIXCHECK
1282 # undef rint
1283 # if HAVE_RAW_DECL_RINT
1284 _GL_WARN_ON_USE (rint, "rint is unportable - "
1285                  "use gnulib module rint for portability");
1286 # endif
1287 #endif
1288
1289 #if @GNULIB_RINTL@
1290 # if !@HAVE_RINTL@
1291 _GL_FUNCDECL_SYS (rintl, long double, (long double x));
1292 # endif
1293 _GL_CXXALIAS_SYS (rintl, long double, (long double x));
1294 _GL_CXXALIASWARN (rintl);
1295 #elif defined GNULIB_POSIXCHECK
1296 # undef rintl
1297 # if HAVE_RAW_DECL_RINTL
1298 _GL_WARN_ON_USE (rintl, "rintl is unportable - "
1299                  "use gnulib module rintl for portability");
1300 # endif
1301 #endif
1302
1303
1304 #if @GNULIB_ROUNDF@
1305 # if @REPLACE_ROUNDF@
1306 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1307 #   undef roundf
1308 #   define roundf rpl_roundf
1309 #  endif
1310 _GL_FUNCDECL_RPL (roundf, float, (float x));
1311 _GL_CXXALIAS_RPL (roundf, float, (float x));
1312 # else
1313 #  if !@HAVE_DECL_ROUNDF@
1314 _GL_FUNCDECL_SYS (roundf, float, (float x));
1315 #  endif
1316 _GL_CXXALIAS_SYS (roundf, float, (float x));
1317 # endif
1318 _GL_CXXALIASWARN (roundf);
1319 #elif defined GNULIB_POSIXCHECK
1320 # undef roundf
1321 # if HAVE_RAW_DECL_ROUNDF
1322 _GL_WARN_ON_USE (roundf, "roundf is unportable - "
1323                  "use gnulib module roundf for portability");
1324 # endif
1325 #endif
1326
1327 #if @GNULIB_ROUND@
1328 # if @REPLACE_ROUND@
1329 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1330 #   undef round
1331 #   define round rpl_round
1332 #  endif
1333 _GL_FUNCDECL_RPL (round, double, (double x));
1334 _GL_CXXALIAS_RPL (round, double, (double x));
1335 # else
1336 #  if !@HAVE_DECL_ROUND@
1337 _GL_FUNCDECL_SYS (round, double, (double x));
1338 #  endif
1339 _GL_CXXALIAS_SYS (round, double, (double x));
1340 # endif
1341 _GL_CXXALIASWARN (round);
1342 #elif defined GNULIB_POSIXCHECK
1343 # undef round
1344 # if HAVE_RAW_DECL_ROUND
1345 _GL_WARN_ON_USE (round, "round is unportable - "
1346                  "use gnulib module round for portability");
1347 # endif
1348 #endif
1349
1350 #if @GNULIB_ROUNDL@
1351 # if @REPLACE_ROUNDL@
1352 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1353 #   undef roundl
1354 #   define roundl rpl_roundl
1355 #  endif
1356 _GL_FUNCDECL_RPL (roundl, long double, (long double x));
1357 _GL_CXXALIAS_RPL (roundl, long double, (long double x));
1358 # else
1359 #  if !@HAVE_DECL_ROUNDL@
1360 _GL_FUNCDECL_SYS (roundl, long double, (long double x));
1361 #  endif
1362 _GL_CXXALIAS_SYS (roundl, long double, (long double x));
1363 # endif
1364 _GL_CXXALIASWARN (roundl);
1365 #elif defined GNULIB_POSIXCHECK
1366 # undef roundl
1367 # if HAVE_RAW_DECL_ROUNDL
1368 _GL_WARN_ON_USE (roundl, "roundl is unportable - "
1369                  "use gnulib module roundl for portability");
1370 # endif
1371 #endif
1372
1373
1374 #if @GNULIB_SINF@
1375 # if !@HAVE_SINF@
1376 #  undef sinf
1377 _GL_FUNCDECL_SYS (sinf, float, (float x));
1378 # endif
1379 _GL_CXXALIAS_SYS (sinf, float, (float x));
1380 _GL_CXXALIASWARN (sinf);
1381 #elif defined GNULIB_POSIXCHECK
1382 # undef sinf
1383 # if HAVE_RAW_DECL_SINF
1384 _GL_WARN_ON_USE (sinf, "sinf is unportable - "
1385                  "use gnulib module sinf for portability");
1386 # endif
1387 #endif
1388
1389 #if @GNULIB_SINL@
1390 # if !@HAVE_SINL@ || !@HAVE_DECL_SINL@
1391 #  undef sinl
1392 _GL_FUNCDECL_SYS (sinl, long double, (long double x));
1393 # endif
1394 _GL_CXXALIAS_SYS (sinl, long double, (long double x));
1395 _GL_CXXALIASWARN (sinl);
1396 #elif defined GNULIB_POSIXCHECK
1397 # undef sinl
1398 # if HAVE_RAW_DECL_SINL
1399 _GL_WARN_ON_USE (sinl, "sinl is unportable - "
1400                  "use gnulib module sinl for portability");
1401 # endif
1402 #endif
1403
1404
1405 #if @GNULIB_SINHF@
1406 # if !@HAVE_SINHF@
1407 #  undef sinhf
1408 _GL_FUNCDECL_SYS (sinhf, float, (float x));
1409 # endif
1410 _GL_CXXALIAS_SYS (sinhf, float, (float x));
1411 _GL_CXXALIASWARN (sinhf);
1412 #elif defined GNULIB_POSIXCHECK
1413 # undef sinhf
1414 # if HAVE_RAW_DECL_SINHF
1415 _GL_WARN_ON_USE (sinhf, "sinhf is unportable - "
1416                  "use gnulib module sinhf for portability");
1417 # endif
1418 #endif
1419
1420
1421 #if @GNULIB_SQRTF@
1422 # if !@HAVE_SQRTF@
1423 #  undef sqrtf
1424 _GL_FUNCDECL_SYS (sqrtf, float, (float x));
1425 # endif
1426 _GL_CXXALIAS_SYS (sqrtf, float, (float x));
1427 _GL_CXXALIASWARN (sqrtf);
1428 #elif defined GNULIB_POSIXCHECK
1429 # undef sqrtf
1430 # if HAVE_RAW_DECL_SQRTF
1431 _GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - "
1432                  "use gnulib module sqrtf for portability");
1433 # endif
1434 #endif
1435
1436 #if @GNULIB_SQRTL@
1437 # if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@
1438 #  undef sqrtl
1439 _GL_FUNCDECL_SYS (sqrtl, long double, (long double x));
1440 # endif
1441 _GL_CXXALIAS_SYS (sqrtl, long double, (long double x));
1442 _GL_CXXALIASWARN (sqrtl);
1443 #elif defined GNULIB_POSIXCHECK
1444 # undef sqrtl
1445 # if HAVE_RAW_DECL_SQRTL
1446 _GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - "
1447                  "use gnulib module sqrtl for portability");
1448 # endif
1449 #endif
1450
1451
1452 #if @GNULIB_TANF@
1453 # if !@HAVE_TANF@
1454 #  undef tanf
1455 _GL_FUNCDECL_SYS (tanf, float, (float x));
1456 # endif
1457 _GL_CXXALIAS_SYS (tanf, float, (float x));
1458 _GL_CXXALIASWARN (tanf);
1459 #elif defined GNULIB_POSIXCHECK
1460 # undef tanf
1461 # if HAVE_RAW_DECL_TANF
1462 _GL_WARN_ON_USE (tanf, "tanf is unportable - "
1463                  "use gnulib module tanf for portability");
1464 # endif
1465 #endif
1466
1467 #if @GNULIB_TANL@
1468 # if !@HAVE_TANL@ || !@HAVE_DECL_TANL@
1469 #  undef tanl
1470 _GL_FUNCDECL_SYS (tanl, long double, (long double x));
1471 # endif
1472 _GL_CXXALIAS_SYS (tanl, long double, (long double x));
1473 _GL_CXXALIASWARN (tanl);
1474 #elif defined GNULIB_POSIXCHECK
1475 # undef tanl
1476 # if HAVE_RAW_DECL_TANL
1477 _GL_WARN_ON_USE (tanl, "tanl is unportable - "
1478                  "use gnulib module tanl for portability");
1479 # endif
1480 #endif
1481
1482
1483 #if @GNULIB_TANHF@
1484 # if !@HAVE_TANHF@
1485 #  undef tanhf
1486 _GL_FUNCDECL_SYS (tanhf, float, (float x));
1487 # endif
1488 _GL_CXXALIAS_SYS (tanhf, float, (float x));
1489 _GL_CXXALIASWARN (tanhf);
1490 #elif defined GNULIB_POSIXCHECK
1491 # undef tanhf
1492 # if HAVE_RAW_DECL_TANHF
1493 _GL_WARN_ON_USE (tanhf, "tanhf is unportable - "
1494                  "use gnulib module tanhf for portability");
1495 # endif
1496 #endif
1497
1498
1499 #if @GNULIB_TRUNCF@
1500 # if @REPLACE_TRUNCF@
1501 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1502 #   define truncf rpl_truncf
1503 #  endif
1504 _GL_FUNCDECL_RPL (truncf, float, (float x));
1505 _GL_CXXALIAS_RPL (truncf, float, (float x));
1506 # else
1507 #  if !@HAVE_DECL_TRUNCF@
1508 _GL_FUNCDECL_SYS (truncf, float, (float x));
1509 #  endif
1510 _GL_CXXALIAS_SYS (truncf, float, (float x));
1511 # endif
1512 _GL_CXXALIASWARN (truncf);
1513 #elif defined GNULIB_POSIXCHECK
1514 # undef truncf
1515 # if HAVE_RAW_DECL_TRUNCF
1516 _GL_WARN_ON_USE (truncf, "truncf is unportable - "
1517                  "use gnulib module truncf for portability");
1518 # endif
1519 #endif
1520
1521 #if @GNULIB_TRUNC@
1522 # if @REPLACE_TRUNC@
1523 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1524 #   define trunc rpl_trunc
1525 #  endif
1526 _GL_FUNCDECL_RPL (trunc, double, (double x));
1527 _GL_CXXALIAS_RPL (trunc, double, (double x));
1528 # else
1529 #  if !@HAVE_DECL_TRUNC@
1530 _GL_FUNCDECL_SYS (trunc, double, (double x));
1531 #  endif
1532 _GL_CXXALIAS_SYS (trunc, double, (double x));
1533 # endif
1534 _GL_CXXALIASWARN (trunc);
1535 #elif defined GNULIB_POSIXCHECK
1536 # undef trunc
1537 # if HAVE_RAW_DECL_TRUNC
1538 _GL_WARN_ON_USE (trunc, "trunc is unportable - "
1539                  "use gnulib module trunc for portability");
1540 # endif
1541 #endif
1542
1543 #if @GNULIB_TRUNCL@
1544 # if @REPLACE_TRUNCL@
1545 #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1546 #   undef truncl
1547 #   define truncl rpl_truncl
1548 #  endif
1549 _GL_FUNCDECL_RPL (truncl, long double, (long double x));
1550 _GL_CXXALIAS_RPL (truncl, long double, (long double x));
1551 # else
1552 #  if !@HAVE_DECL_TRUNCL@
1553 _GL_FUNCDECL_SYS (truncl, long double, (long double x));
1554 #  endif
1555 _GL_CXXALIAS_SYS (truncl, long double, (long double x));
1556 # endif
1557 _GL_CXXALIASWARN (truncl);
1558 #elif defined GNULIB_POSIXCHECK
1559 # undef truncl
1560 # if HAVE_RAW_DECL_TRUNCL
1561 _GL_WARN_ON_USE (truncl, "truncl is unportable - "
1562                  "use gnulib module truncl for portability");
1563 # endif
1564 #endif
1565
1566
1567 /* Definitions of function-like macros come here, after the function
1568    declarations.  */
1569
1570
1571 #if @GNULIB_ISFINITE@
1572 # if @REPLACE_ISFINITE@
1573 _GL_EXTERN_C int gl_isfinitef (float x);
1574 _GL_EXTERN_C int gl_isfinited (double x);
1575 _GL_EXTERN_C int gl_isfinitel (long double x);
1576 #  undef isfinite
1577 #  define isfinite(x) \
1578    (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \
1579     sizeof (x) == sizeof (double) ? gl_isfinited (x) : \
1580     gl_isfinitef (x))
1581 # endif
1582 # ifdef __cplusplus
1583 #  ifdef isfinite
1584 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite)
1585 #   undef isfinite
1586 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite)
1587 #  endif
1588 # endif
1589 #elif defined GNULIB_POSIXCHECK
1590 # if defined isfinite
1591 _GL_WARN_REAL_FLOATING_DECL (isfinite);
1592 #  undef isfinite
1593 #  define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x)
1594 # endif
1595 #endif
1596
1597
1598 #if @GNULIB_ISINF@
1599 # if @REPLACE_ISINF@
1600 _GL_EXTERN_C int gl_isinff (float x);
1601 _GL_EXTERN_C int gl_isinfd (double x);
1602 _GL_EXTERN_C int gl_isinfl (long double x);
1603 #  undef isinf
1604 #  define isinf(x) \
1605    (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \
1606     sizeof (x) == sizeof (double) ? gl_isinfd (x) : \
1607     gl_isinff (x))
1608 # endif
1609 # ifdef __cplusplus
1610 #  ifdef isinf
1611 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf)
1612 #   undef isinf
1613 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf)
1614 #  endif
1615 # endif
1616 #elif defined GNULIB_POSIXCHECK
1617 # if defined isinf
1618 _GL_WARN_REAL_FLOATING_DECL (isinf);
1619 #  undef isinf
1620 #  define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x)
1621 # endif
1622 #endif
1623
1624
1625 #if @GNULIB_ISNANF@
1626 /* Test for NaN for 'float' numbers.  */
1627 # if @HAVE_ISNANF@
1628 /* The original <math.h> included above provides a declaration of isnan macro
1629    or (older) isnanf function.  */
1630 #  if __GNUC__ >= 4
1631     /* GCC 4.0 and newer provides three built-ins for isnan.  */
1632 #   undef isnanf
1633 #   define isnanf(x) __builtin_isnanf ((float)(x))
1634 #  elif defined isnan
1635 #   undef isnanf
1636 #   define isnanf(x) isnan ((float)(x))
1637 #  endif
1638 # else
1639 /* Test whether X is a NaN.  */
1640 #  undef isnanf
1641 #  define isnanf rpl_isnanf
1642 _GL_EXTERN_C int isnanf (float x);
1643 # endif
1644 #endif
1645
1646 #if @GNULIB_ISNAND@
1647 /* Test for NaN for 'double' numbers.
1648    This function is a gnulib extension, unlike isnan() which applied only
1649    to 'double' numbers earlier but now is a type-generic macro.  */
1650 # if @HAVE_ISNAND@
1651 /* The original <math.h> included above provides a declaration of isnan
1652    macro.  */
1653 #  if __GNUC__ >= 4
1654     /* GCC 4.0 and newer provides three built-ins for isnan.  */
1655 #   undef isnand
1656 #   define isnand(x) __builtin_isnan ((double)(x))
1657 #  else
1658 #   undef isnand
1659 #   define isnand(x) isnan ((double)(x))
1660 #  endif
1661 # else
1662 /* Test whether X is a NaN.  */
1663 #  undef isnand
1664 #  define isnand rpl_isnand
1665 _GL_EXTERN_C int isnand (double x);
1666 # endif
1667 #endif
1668
1669 #if @GNULIB_ISNANL@
1670 /* Test for NaN for 'long double' numbers.  */
1671 # if @HAVE_ISNANL@
1672 /* The original <math.h> included above provides a declaration of isnan
1673    macro or (older) isnanl function.  */
1674 #  if __GNUC__ >= 4
1675     /* GCC 4.0 and newer provides three built-ins for isnan.  */
1676 #   undef isnanl
1677 #   define isnanl(x) __builtin_isnanl ((long double)(x))
1678 #  elif defined isnan
1679 #   undef isnanl
1680 #   define isnanl(x) isnan ((long double)(x))
1681 #  endif
1682 # else
1683 /* Test whether X is a NaN.  */
1684 #  undef isnanl
1685 #  define isnanl rpl_isnanl
1686 _GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST;
1687 # endif
1688 #endif
1689
1690 /* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL!  */
1691 #if @GNULIB_ISNAN@
1692 # if @REPLACE_ISNAN@
1693 /* We can't just use the isnanf macro (e.g.) as exposed by
1694    isnanf.h (e.g.) here, because those may end up being macros
1695    that recursively expand back to isnan.  So use the gnulib
1696    replacements for them directly. */
1697 #  if @HAVE_ISNANF@ && __GNUC__ >= 4
1698 #   define gl_isnan_f(x) __builtin_isnanf ((float)(x))
1699 #  else
1700 _GL_EXTERN_C int rpl_isnanf (float x);
1701 #   define gl_isnan_f(x) rpl_isnanf (x)
1702 #  endif
1703 #  if @HAVE_ISNAND@ && __GNUC__ >= 4
1704 #   define gl_isnan_d(x) __builtin_isnan ((double)(x))
1705 #  else
1706 _GL_EXTERN_C int rpl_isnand (double x);
1707 #   define gl_isnan_d(x) rpl_isnand (x)
1708 #  endif
1709 #  if @HAVE_ISNANL@ && __GNUC__ >= 4
1710 #   define gl_isnan_l(x) __builtin_isnanl ((long double)(x))
1711 #  else
1712 _GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST;
1713 #   define gl_isnan_l(x) rpl_isnanl (x)
1714 #  endif
1715 #  undef isnan
1716 #  define isnan(x) \
1717    (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \
1718     sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \
1719     gl_isnan_f (x))
1720 # elif __GNUC__ >= 4
1721 #  undef isnan
1722 #  define isnan(x) \
1723    (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \
1724     sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \
1725     __builtin_isnanf ((float)(x)))
1726 # endif
1727 # ifdef __cplusplus
1728 #  ifdef isnan
1729 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan)
1730 #   undef isnan
1731 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan)
1732 #  endif
1733 # else
1734 /* Ensure isnan is a macro.  */
1735 #  ifndef isnan
1736 #   define isnan isnan
1737 #  endif
1738 # endif
1739 #elif defined GNULIB_POSIXCHECK
1740 # if defined isnan
1741 _GL_WARN_REAL_FLOATING_DECL (isnan);
1742 #  undef isnan
1743 #  define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x)
1744 # endif
1745 #endif
1746
1747
1748 #if @GNULIB_SIGNBIT@
1749 # if @REPLACE_SIGNBIT_USING_GCC@
1750 #  undef signbit
1751    /* GCC 4.0 and newer provides three built-ins for signbit.  */
1752 #  define signbit(x) \
1753    (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
1754     sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
1755     __builtin_signbitf (x))
1756 # endif
1757 # if @REPLACE_SIGNBIT@
1758 #  undef signbit
1759 _GL_EXTERN_C int gl_signbitf (float arg);
1760 _GL_EXTERN_C int gl_signbitd (double arg);
1761 _GL_EXTERN_C int gl_signbitl (long double arg);
1762 #  if __GNUC__ >= 2 && !defined __STRICT_ANSI__
1763 #   define _GL_NUM_UINT_WORDS(type) \
1764       ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
1765 #   if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf
1766 #    define gl_signbitf_OPTIMIZED_MACRO
1767 #    define gl_signbitf(arg) \
1768        ({ union { float _value;                                         \
1769                   unsigned int _word[_GL_NUM_UINT_WORDS (float)];       \
1770                 } _m;                                                   \
1771           _m._value = (arg);                                            \
1772           (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1;          \
1773         })
1774 #   endif
1775 #   if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd
1776 #    define gl_signbitd_OPTIMIZED_MACRO
1777 #    define gl_signbitd(arg) \
1778        ({ union { double _value;                                        \
1779                   unsigned int _word[_GL_NUM_UINT_WORDS (double)];      \
1780                 } _m;                                                   \
1781           _m._value = (arg);                                            \
1782           (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1;          \
1783         })
1784 #   endif
1785 #   if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl
1786 #    define gl_signbitl_OPTIMIZED_MACRO
1787 #    define gl_signbitl(arg) \
1788        ({ union { long double _value;                                   \
1789                   unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \
1790                 } _m;                                                   \
1791           _m._value = (arg);                                            \
1792           (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1;        \
1793         })
1794 #   endif
1795 #  endif
1796 #  define signbit(x) \
1797    (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \
1798     sizeof (x) == sizeof (double) ? gl_signbitd (x) : \
1799     gl_signbitf (x))
1800 # endif
1801 # ifdef __cplusplus
1802 #  ifdef signbit
1803 _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit)
1804 #   undef signbit
1805 _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit)
1806 #  endif
1807 # endif
1808 #elif defined GNULIB_POSIXCHECK
1809 # if defined signbit
1810 _GL_WARN_REAL_FLOATING_DECL (signbit);
1811 #  undef signbit
1812 #  define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x)
1813 # endif
1814 #endif
1815
1816
1817 #endif /* _@GUARD_PREFIX@_MATH_H */
1818 #endif /* _@GUARD_PREFIX@_MATH_H */