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