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