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