1/* A GNU-like <math.h>.
2
3   Copyright (C) 2002-2003, 2007-2020 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 <https://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/* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in <fp.h>.  */
32#if defined __VMS && ! defined NAN
33# include <fp.h>
34#endif
35
36#ifndef _GL_INLINE_HEADER_BEGIN
37 #error "Please include config.h first."
38#endif
39_GL_INLINE_HEADER_BEGIN
40#ifndef _GL_MATH_INLINE
41# define _GL_MATH_INLINE _GL_INLINE
42#endif
43
44/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
45
46/* The definition of _GL_ARG_NONNULL is copied here.  */
47
48/* The definition of _GL_WARN_ON_USE is copied here.  */
49
50#ifdef __cplusplus
51/* Helper macros to define type-generic function FUNC as overloaded functions,
52   rather than as macros like in C.  POSIX declares these with an argument of
53   real-floating (that is, one of float, double, or long double).  */
54# define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \
55static inline int                                                   \
56_gl_cxx_ ## func ## f (float f)                                     \
57{                                                                   \
58  return func (f);                                                  \
59}                                                                   \
60static inline int                                                   \
61_gl_cxx_ ## func ## d (double d)                                    \
62{                                                                   \
63  return func (d);                                                  \
64}                                                                   \
65static inline int                                                   \
66_gl_cxx_ ## func ## l (long double l)                               \
67{                                                                   \
68  return func (l);                                                  \
69}
70# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func,rpl_func,rettype) \
71_GL_BEGIN_NAMESPACE                                                 \
72inline rettype                                                      \
73rpl_func (float f)                                                  \
74{                                                                   \
75  return _gl_cxx_ ## func ## f (f);                                 \
76}                                                                   \
77inline rettype                                                      \
78rpl_func (double d)                                                 \
79{                                                                   \
80  return _gl_cxx_ ## func ## d (d);                                 \
81}                                                                   \
82inline rettype                                                      \
83rpl_func (long double l)                                            \
84{                                                                   \
85  return _gl_cxx_ ## func ## l (l);                                 \
86}                                                                   \
87_GL_END_NAMESPACE
88#endif
89
90/* Helper macros to define a portability warning for the
91   classification macro FUNC called with VALUE.  POSIX declares the
92   classification macros with an argument of real-floating (that is,
93   one of float, double, or long double).  */
94#define _GL_WARN_REAL_FLOATING_DECL(func) \
95_GL_MATH_INLINE int                                                       \
96_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - "                      \
97                           "use gnulib module " #func " for portability") \
98rpl_ ## func ## f (float f)                                               \
99{                                                                         \
100  return func (f);                                                        \
101}                                                                         \
102_GL_MATH_INLINE int                                                       \
103_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - "                      \
104                           "use gnulib module " #func " for portability") \
105rpl_ ## func ## d (double d)                                              \
106{                                                                         \
107  return func (d);                                                        \
108}                                                                         \
109_GL_MATH_INLINE int                                                       \
110_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - "                      \
111                           "use gnulib module " #func " for portability") \
112rpl_ ## func ## l (long double l)                                         \
113{                                                                         \
114  return func (l);                                                        \
115}
116#define _GL_WARN_REAL_FLOATING_IMPL(func, value) \
117  (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value)     \
118   : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value)  \
119   : rpl_ ## func ## l (value))
120
121
122#if @REPLACE_ITOLD@
123/* Pull in a function that fixes the 'int' to 'long double' conversion
124   of glibc 2.7.  */
125_GL_EXTERN_C void _Qp_itoq (long double *, int);
126static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq;
127#endif
128
129
130/* For clang: Use __has_builtin to determine whether a builtin is available.  */
131#ifndef __has_builtin
132# define __has_builtin(name) 0
133#endif
134
135
136/* POSIX allows platforms that don't support NAN.  But all major
137   machines in the past 15 years have supported something close to
138   IEEE NaN, so we define this unconditionally.  We also must define
139   it on platforms like Solaris 10, where NAN is present but defined
140   as a function pointer rather than a floating point constant.  */
141#if !defined NAN || @REPLACE_NAN@
142# if !GNULIB_defined_NAN
143#  undef NAN
144  /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler
145     choke on the expression 0.0 / 0.0.  */
146#  if defined __DECC || defined _MSC_VER
147_GL_MATH_INLINE float
148_NaN ()
149{
150  static float zero = 0.0f;
151  return zero / zero;
152}
153#   define NAN (_NaN())
154#  else
155#   define NAN (0.0f / 0.0f)
156#  endif
157#  define GNULIB_defined_NAN 1
158# endif
159#endif
160
161/* Solaris 10 defines HUGE_VAL, but as a function pointer rather
162   than a floating point constant.  */
163#if @REPLACE_HUGE_VAL@
164# undef HUGE_VALF
165# define HUGE_VALF (1.0f / 0.0f)
166# undef HUGE_VAL
167# define HUGE_VAL (1.0 / 0.0)
168# undef HUGE_VALL
169# define HUGE_VALL (1.0L / 0.0L)
170#endif
171
172/* HUGE_VALF is a 'float' Infinity.  */
173#ifndef HUGE_VALF
174# if defined _MSC_VER
175/* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f.  */
176#  define HUGE_VALF (1e25f * 1e25f)
177# else
178#  define HUGE_VALF (1.0f / 0.0f)
179# endif
180#endif
181
182/* HUGE_VAL is a 'double' Infinity.  */
183#ifndef HUGE_VAL
184# if defined _MSC_VER
185/* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0.  */
186#  define HUGE_VAL (1e250 * 1e250)
187# else
188#  define HUGE_VAL (1.0 / 0.0)
189# endif
190#endif
191
192/* HUGE_VALL is a 'long double' Infinity.  */
193#ifndef HUGE_VALL
194# if defined _MSC_VER
195/* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L.  */
196#  define HUGE_VALL (1e250L * 1e250L)
197# else
198#  define HUGE_VALL (1.0L / 0.0L)
199# endif
200#endif
201
202
203#if defined FP_ILOGB0 && defined FP_ILOGBNAN
204 /* Ensure FP_ILOGB0 and FP_ILOGBNAN are correct.  */
205# if defined __HAIKU__
206  /* Haiku: match what ilogb() does */
207#  undef FP_ILOGB0
208#  undef FP_ILOGBNAN
209#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
210#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
211# endif
212#else
213 /* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined.  */
214# if defined __NetBSD__ || defined __sgi
215  /* NetBSD, IRIX 6.5: match what ilogb() does */
216#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
217#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
218# elif defined _AIX
219  /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */
220#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
221#  define FP_ILOGBNAN 2147483647 /* INT_MAX */
222# elif defined __sun
223  /* Solaris 9: match what ilogb() does */
224#  define FP_ILOGB0   (- 2147483647) /* - INT_MAX */
225#  define FP_ILOGBNAN 2147483647 /* INT_MAX */
226# else
227  /* Gnulib defined values.  */
228#  define FP_ILOGB0   (- 2147483647) /* - INT_MAX */
229#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
230# endif
231#endif
232
233
234#if @GNULIB_ACOSF@
235# if @REPLACE_ACOSF@
236#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
237#   undef acosf
238#   define acosf rpl_acosf
239#  endif
240_GL_FUNCDECL_RPL (acosf, float, (float x));
241_GL_CXXALIAS_RPL (acosf, float, (float x));
242# else
243#  if !@HAVE_ACOSF@
244#   undef acosf
245_GL_FUNCDECL_SYS (acosf, float, (float x));
246#  endif
247_GL_CXXALIAS_SYS (acosf, float, (float x));
248# endif
249_GL_CXXALIASWARN (acosf);
250#elif defined GNULIB_POSIXCHECK
251# undef acosf
252# if HAVE_RAW_DECL_ACOSF
253_GL_WARN_ON_USE (acosf, "acosf is unportable - "
254                 "use gnulib module acosf for portability");
255# endif
256#endif
257
258#if @GNULIB_ACOSL@
259# if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@
260#  undef acosl
261_GL_FUNCDECL_SYS (acosl, long double, (long double x));
262# endif
263_GL_CXXALIAS_SYS (acosl, long double, (long double x));
264_GL_CXXALIASWARN (acosl);
265#elif defined GNULIB_POSIXCHECK
266# undef acosl
267# if HAVE_RAW_DECL_ACOSL
268_GL_WARN_ON_USE (acosl, "acosl is unportable - "
269                 "use gnulib module acosl for portability");
270# endif
271#endif
272
273
274#if @GNULIB_ASINF@
275# if @REPLACE_ASINF@
276#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
277#   undef asinf
278#   define asinf rpl_asinf
279#  endif
280_GL_FUNCDECL_RPL (asinf, float, (float x));
281_GL_CXXALIAS_RPL (asinf, float, (float x));
282# else
283#  if !@HAVE_ASINF@
284#   undef asinf
285_GL_FUNCDECL_SYS (asinf, float, (float x));
286#  endif
287_GL_CXXALIAS_SYS (asinf, float, (float x));
288# endif
289_GL_CXXALIASWARN (asinf);
290#elif defined GNULIB_POSIXCHECK
291# undef asinf
292# if HAVE_RAW_DECL_ASINF
293_GL_WARN_ON_USE (asinf, "asinf is unportable - "
294                 "use gnulib module asinf for portability");
295# endif
296#endif
297
298#if @GNULIB_ASINL@
299# if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@
300#  undef asinl
301_GL_FUNCDECL_SYS (asinl, long double, (long double x));
302# endif
303_GL_CXXALIAS_SYS (asinl, long double, (long double x));
304_GL_CXXALIASWARN (asinl);
305#elif defined GNULIB_POSIXCHECK
306# undef asinl
307# if HAVE_RAW_DECL_ASINL
308_GL_WARN_ON_USE (asinl, "asinl is unportable - "
309                 "use gnulib module asinl for portability");
310# endif
311#endif
312
313
314#if @GNULIB_ATANF@
315# if @REPLACE_ATANF@
316#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
317#   undef atanf
318#   define atanf rpl_atanf
319#  endif
320_GL_FUNCDECL_RPL (atanf, float, (float x));
321_GL_CXXALIAS_RPL (atanf, float, (float x));
322# else
323#  if !@HAVE_ATANF@
324#   undef atanf
325_GL_FUNCDECL_SYS (atanf, float, (float x));
326#  endif
327_GL_CXXALIAS_SYS (atanf, float, (float x));
328# endif
329_GL_CXXALIASWARN (atanf);
330#elif defined GNULIB_POSIXCHECK
331# undef atanf
332# if HAVE_RAW_DECL_ATANF
333_GL_WARN_ON_USE (atanf, "atanf is unportable - "
334                 "use gnulib module atanf for portability");
335# endif
336#endif
337
338#if @GNULIB_ATANL@
339# if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@
340#  undef atanl
341_GL_FUNCDECL_SYS (atanl, long double, (long double x));
342# endif
343_GL_CXXALIAS_SYS (atanl, long double, (long double x));
344_GL_CXXALIASWARN (atanl);
345#elif defined GNULIB_POSIXCHECK
346# undef atanl
347# if HAVE_RAW_DECL_ATANL
348_GL_WARN_ON_USE (atanl, "atanl is unportable - "
349                 "use gnulib module atanl for portability");
350# endif
351#endif
352
353
354#if @GNULIB_ATAN2F@
355# if @REPLACE_ATAN2F@
356#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
357#   undef atan2f
358#   define atan2f rpl_atan2f
359#  endif
360_GL_FUNCDECL_RPL (atan2f, float, (float y, float x));
361_GL_CXXALIAS_RPL (atan2f, float, (float y, float x));
362# else
363#  if !@HAVE_ATAN2F@
364#   undef atan2f
365_GL_FUNCDECL_SYS (atan2f, float, (float y, float x));
366#  endif
367_GL_CXXALIAS_SYS (atan2f, float, (float y, float x));
368# endif
369_GL_CXXALIASWARN (atan2f);
370#elif defined GNULIB_POSIXCHECK
371# undef atan2f
372# if HAVE_RAW_DECL_ATAN2F
373_GL_WARN_ON_USE (atan2f, "atan2f is unportable - "
374                 "use gnulib module atan2f for portability");
375# endif
376#endif
377
378
379#if @GNULIB_CBRTF@
380# if @REPLACE_CBRTF@
381#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
382#   undef cbrtf
383#   define cbrtf rpl_cbrtf
384#  endif
385_GL_FUNCDECL_RPL (cbrtf, float, (float x));
386_GL_CXXALIAS_RPL (cbrtf, float, (float x));
387# else
388#  if !@HAVE_DECL_CBRTF@
389_GL_FUNCDECL_SYS (cbrtf, float, (float x));
390#  endif
391_GL_CXXALIAS_SYS (cbrtf, float, (float x));
392# endif
393_GL_CXXALIASWARN (cbrtf);
394#elif defined GNULIB_POSIXCHECK
395# undef cbrtf
396# if HAVE_RAW_DECL_CBRTF
397_GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - "
398                 "use gnulib module cbrtf for portability");
399# endif
400#endif
401
402#if @GNULIB_CBRT@
403# if !@HAVE_CBRT@
404_GL_FUNCDECL_SYS (cbrt, double, (double x));
405# endif
406_GL_CXXALIAS_SYS (cbrt, double, (double x));
407# if __GLIBC__ >= 2
408_GL_CXXALIASWARN (cbrt);
409# endif
410#elif defined GNULIB_POSIXCHECK
411# undef cbrt
412# if HAVE_RAW_DECL_CBRT
413_GL_WARN_ON_USE (cbrt, "cbrt is unportable - "
414                 "use gnulib module cbrt for portability");
415# endif
416#endif
417
418#if @GNULIB_CBRTL@
419# if @REPLACE_CBRTL@
420#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
421#   undef cbrtl
422#   define cbrtl rpl_cbrtl
423#  endif
424_GL_FUNCDECL_RPL (cbrtl, long double, (long double x));
425_GL_CXXALIAS_RPL (cbrtl, long double, (long double x));
426# else
427#  if !@HAVE_DECL_CBRTL@
428_GL_FUNCDECL_SYS (cbrtl, long double, (long double x));
429#  endif
430_GL_CXXALIAS_SYS (cbrtl, long double, (long double x));
431# endif
432_GL_CXXALIASWARN (cbrtl);
433#elif defined GNULIB_POSIXCHECK
434# undef cbrtl
435# if HAVE_RAW_DECL_CBRTL
436_GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - "
437                 "use gnulib module cbrtl for portability");
438# endif
439#endif
440
441
442#if @GNULIB_CEILF@
443# if @REPLACE_CEILF@
444#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
445#   undef ceilf
446#   define ceilf rpl_ceilf
447#  endif
448_GL_FUNCDECL_RPL (ceilf, float, (float x));
449_GL_CXXALIAS_RPL (ceilf, float, (float x));
450# else
451#  if !@HAVE_DECL_CEILF@
452#   undef ceilf
453_GL_FUNCDECL_SYS (ceilf, float, (float x));
454#  endif
455_GL_CXXALIAS_SYS (ceilf, float, (float x));
456# endif
457_GL_CXXALIASWARN (ceilf);
458#elif defined GNULIB_POSIXCHECK
459# undef ceilf
460# if HAVE_RAW_DECL_CEILF
461_GL_WARN_ON_USE (ceilf, "ceilf is unportable - "
462                 "use gnulib module ceilf for portability");
463# endif
464#endif
465
466#if @GNULIB_CEIL@
467# if @REPLACE_CEIL@
468#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
469#   undef ceil
470#   define ceil rpl_ceil
471#  endif
472_GL_FUNCDECL_RPL (ceil, double, (double x));
473_GL_CXXALIAS_RPL (ceil, double, (double x));
474# else
475_GL_CXXALIAS_SYS (ceil, double, (double x));
476# endif
477# if __GLIBC__ >= 2
478_GL_CXXALIASWARN (ceil);
479# endif
480#endif
481
482#if @GNULIB_CEILL@
483# if @REPLACE_CEILL@
484#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
485#   undef ceill
486#   define ceill rpl_ceill
487#  endif
488_GL_FUNCDECL_RPL (ceill, long double, (long double x));
489_GL_CXXALIAS_RPL (ceill, long double, (long double x));
490# else
491#  if !@HAVE_DECL_CEILL@
492#   undef ceill
493_GL_FUNCDECL_SYS (ceill, long double, (long double x));
494#  endif
495_GL_CXXALIAS_SYS (ceill, long double, (long double x));
496# endif
497_GL_CXXALIASWARN (ceill);
498#elif defined GNULIB_POSIXCHECK
499# undef ceill
500# if HAVE_RAW_DECL_CEILL
501_GL_WARN_ON_USE (ceill, "ceill is unportable - "
502                 "use gnulib module ceill for portability");
503# endif
504#endif
505
506
507#if @GNULIB_COPYSIGNF@
508# if !@HAVE_DECL_COPYSIGNF@
509#  undef copysignf
510_GL_FUNCDECL_SYS (copysignf, float, (float x, float y));
511# endif
512_GL_CXXALIAS_SYS (copysignf, float, (float x, float y));
513_GL_CXXALIASWARN (copysignf);
514#elif defined GNULIB_POSIXCHECK
515# undef copysignf
516# if HAVE_RAW_DECL_COPYSIGNF
517_GL_WARN_ON_USE (copysignf, "copysignf is unportable - "
518                 "use gnulib module copysignf for portability");
519# endif
520#endif
521
522#if @GNULIB_COPYSIGN@
523# if !@HAVE_COPYSIGN@
524_GL_FUNCDECL_SYS (copysign, double, (double x, double y));
525# endif
526_GL_CXXALIAS_SYS (copysign, double, (double x, double y));
527# if __GLIBC__ >= 2
528_GL_CXXALIASWARN (copysign);
529# endif
530#elif defined GNULIB_POSIXCHECK
531# undef copysign
532# if HAVE_RAW_DECL_COPYSIGN
533_GL_WARN_ON_USE (copysign, "copysign is unportable - "
534                 "use gnulib module copysign for portability");
535# endif
536#endif
537
538#if @GNULIB_COPYSIGNL@
539# if !@HAVE_COPYSIGNL@
540_GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y));
541# endif
542_GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y));
543_GL_CXXALIASWARN (copysignl);
544#elif defined GNULIB_POSIXCHECK
545# undef copysignl
546# if HAVE_RAW_DECL_COPYSIGNL
547_GL_WARN_ON_USE (copysign, "copysignl is unportable - "
548                 "use gnulib module copysignl for portability");
549# endif
550#endif
551
552
553#if @GNULIB_COSF@
554# if @REPLACE_COSF@
555#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
556#   undef cosf
557#   define cosf rpl_cosf
558#  endif
559_GL_FUNCDECL_RPL (cosf, float, (float x));
560_GL_CXXALIAS_RPL (cosf, float, (float x));
561# else
562#  if !@HAVE_COSF@
563#   undef cosf
564_GL_FUNCDECL_SYS (cosf, float, (float x));
565#  endif
566_GL_CXXALIAS_SYS (cosf, float, (float x));
567# endif
568_GL_CXXALIASWARN (cosf);
569#elif defined GNULIB_POSIXCHECK
570# undef cosf
571# if HAVE_RAW_DECL_COSF
572_GL_WARN_ON_USE (cosf, "cosf is unportable - "
573                 "use gnulib module cosf for portability");
574# endif
575#endif
576
577#if @GNULIB_COSL@
578# if !@HAVE_COSL@ || !@HAVE_DECL_COSL@
579#  undef cosl
580_GL_FUNCDECL_SYS (cosl, long double, (long double x));
581# endif
582_GL_CXXALIAS_SYS (cosl, long double, (long double x));
583_GL_CXXALIASWARN (cosl);
584#elif defined GNULIB_POSIXCHECK
585# undef cosl
586# if HAVE_RAW_DECL_COSL
587_GL_WARN_ON_USE (cosl, "cosl is unportable - "
588                 "use gnulib module cosl for portability");
589# endif
590#endif
591
592
593#if @GNULIB_COSHF@
594# if @REPLACE_COSHF@
595#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
596#   undef coshf
597#   define coshf rpl_coshf
598#  endif
599_GL_FUNCDECL_RPL (coshf, float, (float x));
600_GL_CXXALIAS_RPL (coshf, float, (float x));
601# else
602#  if !@HAVE_COSHF@
603#   undef coshf
604_GL_FUNCDECL_SYS (coshf, float, (float x));
605#  endif
606_GL_CXXALIAS_SYS (coshf, float, (float x));
607# endif
608_GL_CXXALIASWARN (coshf);
609#elif defined GNULIB_POSIXCHECK
610# undef coshf
611# if HAVE_RAW_DECL_COSHF
612_GL_WARN_ON_USE (coshf, "coshf is unportable - "
613                 "use gnulib module coshf for portability");
614# endif
615#endif
616
617
618#if @GNULIB_EXPF@
619# if @REPLACE_EXPF@
620#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
621#   undef expf
622#   define expf rpl_expf
623#  endif
624_GL_FUNCDECL_RPL (expf, float, (float x));
625_GL_CXXALIAS_RPL (expf, float, (float x));
626# else
627#  if !@HAVE_EXPF@
628#   undef expf
629_GL_FUNCDECL_SYS (expf, float, (float x));
630#  endif
631_GL_CXXALIAS_SYS (expf, float, (float x));
632# endif
633_GL_CXXALIASWARN (expf);
634#elif defined GNULIB_POSIXCHECK
635# undef expf
636# if HAVE_RAW_DECL_EXPF
637_GL_WARN_ON_USE (expf, "expf is unportable - "
638                 "use gnulib module expf for portability");
639# endif
640#endif
641
642#if @GNULIB_EXPL@
643# if @REPLACE_EXPL@
644#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
645#   undef expl
646#   define expl rpl_expl
647#  endif
648_GL_FUNCDECL_RPL (expl, long double, (long double x));
649_GL_CXXALIAS_RPL (expl, long double, (long double x));
650# else
651#  if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@
652#   undef expl
653_GL_FUNCDECL_SYS (expl, long double, (long double x));
654#  endif
655_GL_CXXALIAS_SYS (expl, long double, (long double x));
656# endif
657_GL_CXXALIASWARN (expl);
658#elif defined GNULIB_POSIXCHECK
659# undef expl
660# if HAVE_RAW_DECL_EXPL
661_GL_WARN_ON_USE (expl, "expl is unportable - "
662                 "use gnulib module expl for portability");
663# endif
664#endif
665
666
667#if @GNULIB_EXP2F@
668# if !@HAVE_DECL_EXP2F@
669_GL_FUNCDECL_SYS (exp2f, float, (float x));
670# endif
671_GL_CXXALIAS_SYS (exp2f, float, (float x));
672_GL_CXXALIASWARN (exp2f);
673#elif defined GNULIB_POSIXCHECK
674# undef exp2f
675# if HAVE_RAW_DECL_EXP2F
676_GL_WARN_ON_USE (exp2f, "exp2f is unportable - "
677                 "use gnulib module exp2f for portability");
678# endif
679#endif
680
681#if @GNULIB_EXP2@
682# if @REPLACE_EXP2@
683#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
684#   undef exp2
685#   define exp2 rpl_exp2
686#  endif
687_GL_FUNCDECL_RPL (exp2, double, (double x));
688_GL_CXXALIAS_RPL (exp2, double, (double x));
689# else
690#  if !@HAVE_DECL_EXP2@
691_GL_FUNCDECL_SYS (exp2, double, (double x));
692#  endif
693_GL_CXXALIAS_SYS (exp2, double, (double x));
694# endif
695# if __GLIBC__ >= 2
696_GL_CXXALIASWARN (exp2);
697# endif
698#elif defined GNULIB_POSIXCHECK
699# undef exp2
700# if HAVE_RAW_DECL_EXP2
701_GL_WARN_ON_USE (exp2, "exp2 is unportable - "
702                 "use gnulib module exp2 for portability");
703# endif
704#endif
705
706#if @GNULIB_EXP2L@
707# if @REPLACE_EXP2L@
708#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
709#   undef exp2l
710#   define exp2l rpl_exp2l
711#  endif
712_GL_FUNCDECL_RPL (exp2l, long double, (long double x));
713_GL_CXXALIAS_RPL (exp2l, long double, (long double x));
714# else
715#  if !@HAVE_DECL_EXP2L@
716#   undef exp2l
717_GL_FUNCDECL_SYS (exp2l, long double, (long double x));
718#  endif
719_GL_CXXALIAS_SYS (exp2l, long double, (long double x));
720# endif
721_GL_CXXALIASWARN (exp2l);
722#elif defined GNULIB_POSIXCHECK
723# undef exp2l
724# if HAVE_RAW_DECL_EXP2L
725_GL_WARN_ON_USE (exp2l, "exp2l is unportable - "
726                 "use gnulib module exp2l for portability");
727# endif
728#endif
729
730
731#if @GNULIB_EXPM1F@
732# if @REPLACE_EXPM1F@
733#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
734#   undef expm1f
735#   define expm1f rpl_expm1f
736#  endif
737_GL_FUNCDECL_RPL (expm1f, float, (float x));
738_GL_CXXALIAS_RPL (expm1f, float, (float x));
739# else
740#  if !@HAVE_EXPM1F@
741_GL_FUNCDECL_SYS (expm1f, float, (float x));
742#  endif
743_GL_CXXALIAS_SYS (expm1f, float, (float x));
744# endif
745_GL_CXXALIASWARN (expm1f);
746#elif defined GNULIB_POSIXCHECK
747# undef expm1f
748# if HAVE_RAW_DECL_EXPM1F
749_GL_WARN_ON_USE (expm1f, "expm1f is unportable - "
750                 "use gnulib module expm1f for portability");
751# endif
752#endif
753
754#if @GNULIB_EXPM1@
755# if @REPLACE_EXPM1@
756#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
757#   undef expm1
758#   define expm1 rpl_expm1
759#  endif
760_GL_FUNCDECL_RPL (expm1, double, (double x));
761_GL_CXXALIAS_RPL (expm1, double, (double x));
762# else
763#  if !@HAVE_EXPM1@
764_GL_FUNCDECL_SYS (expm1, double, (double x));
765#  endif
766_GL_CXXALIAS_SYS (expm1, double, (double x));
767# endif
768# if __GLIBC__ >= 2
769_GL_CXXALIASWARN (expm1);
770# endif
771#elif defined GNULIB_POSIXCHECK
772# undef expm1
773# if HAVE_RAW_DECL_EXPM1
774_GL_WARN_ON_USE (expm1, "expm1 is unportable - "
775                 "use gnulib module expm1 for portability");
776# endif
777#endif
778
779#if @GNULIB_EXPM1L@
780# if @REPLACE_EXPM1L@
781#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
782#   undef expm1l
783#   define expm1l rpl_expm1l
784#  endif
785_GL_FUNCDECL_RPL (expm1l, long double, (long double x));
786_GL_CXXALIAS_RPL (expm1l, long double, (long double x));
787# else
788#  if !@HAVE_DECL_EXPM1L@
789#   undef expm1l
790#   if !(defined __cplusplus && defined _AIX)
791_GL_FUNCDECL_SYS (expm1l, long double, (long double x));
792#   endif
793#  endif
794_GL_CXXALIAS_SYS (expm1l, long double, (long double x));
795# endif
796_GL_CXXALIASWARN (expm1l);
797#elif defined GNULIB_POSIXCHECK
798# undef expm1l
799# if HAVE_RAW_DECL_EXPM1L
800_GL_WARN_ON_USE (expm1l, "expm1l is unportable - "
801                 "use gnulib module expm1l for portability");
802# endif
803#endif
804
805
806#if @GNULIB_FABSF@
807# if !@HAVE_FABSF@
808#  undef fabsf
809_GL_FUNCDECL_SYS (fabsf, float, (float x));
810# endif
811_GL_CXXALIAS_SYS (fabsf, float, (float x));
812_GL_CXXALIASWARN (fabsf);
813#elif defined GNULIB_POSIXCHECK
814# undef fabsf
815# if HAVE_RAW_DECL_FABSF
816_GL_WARN_ON_USE (fabsf, "fabsf is unportable - "
817                 "use gnulib module fabsf for portability");
818# endif
819#endif
820
821#if @GNULIB_FABSL@
822# if @REPLACE_FABSL@
823#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
824#   undef fabsl
825#   define fabsl rpl_fabsl
826#  endif
827_GL_FUNCDECL_RPL (fabsl, long double, (long double x));
828_GL_CXXALIAS_RPL (fabsl, long double, (long double x));
829# else
830#  if !@HAVE_FABSL@
831#   undef fabsl
832_GL_FUNCDECL_SYS (fabsl, long double, (long double x));
833#  endif
834_GL_CXXALIAS_SYS (fabsl, long double, (long double x));
835# endif
836_GL_CXXALIASWARN (fabsl);
837#elif defined GNULIB_POSIXCHECK
838# undef fabsl
839# if HAVE_RAW_DECL_FABSL
840_GL_WARN_ON_USE (fabsl, "fabsl is unportable - "
841                 "use gnulib module fabsl for portability");
842# endif
843#endif
844
845
846#if @GNULIB_FLOORF@
847# if @REPLACE_FLOORF@
848#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
849#   undef floorf
850#   define floorf rpl_floorf
851#  endif
852_GL_FUNCDECL_RPL (floorf, float, (float x));
853_GL_CXXALIAS_RPL (floorf, float, (float x));
854# else
855#  if !@HAVE_DECL_FLOORF@
856#   undef floorf
857_GL_FUNCDECL_SYS (floorf, float, (float x));
858#  endif
859_GL_CXXALIAS_SYS (floorf, float, (float x));
860# endif
861_GL_CXXALIASWARN (floorf);
862#elif defined GNULIB_POSIXCHECK
863# undef floorf
864# if HAVE_RAW_DECL_FLOORF
865_GL_WARN_ON_USE (floorf, "floorf is unportable - "
866                 "use gnulib module floorf for portability");
867# endif
868#endif
869
870#if @GNULIB_FLOOR@
871# if @REPLACE_FLOOR@
872#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
873#   undef floor
874#   define floor rpl_floor
875#  endif
876_GL_FUNCDECL_RPL (floor, double, (double x));
877_GL_CXXALIAS_RPL (floor, double, (double x));
878# else
879_GL_CXXALIAS_SYS (floor, double, (double x));
880# endif
881# if __GLIBC__ >= 2
882_GL_CXXALIASWARN (floor);
883# endif
884#endif
885
886#if @GNULIB_FLOORL@
887# if @REPLACE_FLOORL@
888#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
889#   undef floorl
890#   define floorl rpl_floorl
891#  endif
892_GL_FUNCDECL_RPL (floorl, long double, (long double x));
893_GL_CXXALIAS_RPL (floorl, long double, (long double x));
894# else
895#  if !@HAVE_DECL_FLOORL@
896#   undef floorl
897_GL_FUNCDECL_SYS (floorl, long double, (long double x));
898#  endif
899_GL_CXXALIAS_SYS (floorl, long double, (long double x));
900# endif
901_GL_CXXALIASWARN (floorl);
902#elif defined GNULIB_POSIXCHECK
903# undef floorl
904# if HAVE_RAW_DECL_FLOORL
905_GL_WARN_ON_USE (floorl, "floorl is unportable - "
906                 "use gnulib module floorl for portability");
907# endif
908#endif
909
910
911#if @GNULIB_FMAF@
912# if @REPLACE_FMAF@
913#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
914#   undef fmaf
915#   define fmaf rpl_fmaf
916#  endif
917_GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z));
918_GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z));
919# else
920#  if !@HAVE_FMAF@
921#   undef fmaf
922_GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z));
923#  endif
924_GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z));
925# endif
926_GL_CXXALIASWARN (fmaf);
927#elif defined GNULIB_POSIXCHECK
928# undef fmaf
929# if HAVE_RAW_DECL_FMAF
930_GL_WARN_ON_USE (fmaf, "fmaf is unportable - "
931                 "use gnulib module fmaf for portability");
932# endif
933#endif
934
935#if @GNULIB_FMA@
936# if @REPLACE_FMA@
937#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
938#   undef fma
939#   define fma rpl_fma
940#  endif
941_GL_FUNCDECL_RPL (fma, double, (double x, double y, double z));
942_GL_CXXALIAS_RPL (fma, double, (double x, double y, double z));
943# else
944#  if !@HAVE_FMA@
945#   undef fma
946_GL_FUNCDECL_SYS (fma, double, (double x, double y, double z));
947#  endif
948_GL_CXXALIAS_SYS (fma, double, (double x, double y, double z));
949# endif
950# if __GLIBC__ >= 2
951_GL_CXXALIASWARN (fma);
952# endif
953#elif defined GNULIB_POSIXCHECK
954# undef fma
955# if HAVE_RAW_DECL_FMA
956_GL_WARN_ON_USE (fma, "fma is unportable - "
957                 "use gnulib module fma for portability");
958# endif
959#endif
960
961#if @GNULIB_FMAL@
962# if @REPLACE_FMAL@
963#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
964#   undef fmal
965#   define fmal rpl_fmal
966#  endif
967_GL_FUNCDECL_RPL (fmal, long double,
968                  (long double x, long double y, long double z));
969_GL_CXXALIAS_RPL (fmal, long double,
970                  (long double x, long double y, long double z));
971# else
972#  if !@HAVE_FMAL@
973#   undef fmal
974#   if !(defined __cplusplus && defined _AIX)
975_GL_FUNCDECL_SYS (fmal, long double,
976                  (long double x, long double y, long double z));
977#   endif
978#  endif
979_GL_CXXALIAS_SYS (fmal, long double,
980                  (long double x, long double y, long double z));
981# endif
982_GL_CXXALIASWARN (fmal);
983#elif defined GNULIB_POSIXCHECK
984# undef fmal
985# if HAVE_RAW_DECL_FMAL
986_GL_WARN_ON_USE (fmal, "fmal is unportable - "
987                 "use gnulib module fmal for portability");
988# endif
989#endif
990
991
992#if @GNULIB_FMODF@
993# if @REPLACE_FMODF@
994#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
995#   undef fmodf
996#   define fmodf rpl_fmodf
997#  endif
998_GL_FUNCDECL_RPL (fmodf, float, (float x, float y));
999_GL_CXXALIAS_RPL (fmodf, float, (float x, float y));
1000# else
1001#  if !@HAVE_FMODF@
1002#   undef fmodf
1003_GL_FUNCDECL_SYS (fmodf, float, (float x, float y));
1004#  endif
1005_GL_CXXALIAS_SYS (fmodf, float, (float x, float y));
1006# endif
1007_GL_CXXALIASWARN (fmodf);
1008#elif defined GNULIB_POSIXCHECK
1009# undef fmodf
1010# if HAVE_RAW_DECL_FMODF
1011_GL_WARN_ON_USE (fmodf, "fmodf is unportable - "
1012                 "use gnulib module fmodf for portability");
1013# endif
1014#endif
1015
1016#if @GNULIB_FMOD@
1017# if @REPLACE_FMOD@
1018#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1019#   undef fmod
1020#   define fmod rpl_fmod
1021#  endif
1022_GL_FUNCDECL_RPL (fmod, double, (double x, double y));
1023_GL_CXXALIAS_RPL (fmod, double, (double x, double y));
1024# else
1025_GL_CXXALIAS_SYS (fmod, double, (double x, double y));
1026# endif
1027# if __GLIBC__ >= 2
1028_GL_CXXALIASWARN (fmod);
1029# endif
1030#elif defined GNULIB_POSIXCHECK
1031# undef fmod
1032# if HAVE_RAW_DECL_FMOD
1033_GL_WARN_ON_USE (fmod, "fmod has portability problems - "
1034                 "use gnulib module fmod for portability");
1035# endif
1036#endif
1037
1038#if @GNULIB_FMODL@
1039# if @REPLACE_FMODL@
1040#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1041#   undef fmodl
1042#   define fmodl rpl_fmodl
1043#  endif
1044_GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y));
1045_GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y));
1046# else
1047#  if !@HAVE_FMODL@
1048#   undef fmodl
1049_GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y));
1050#  endif
1051_GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y));
1052# endif
1053_GL_CXXALIASWARN (fmodl);
1054#elif defined GNULIB_POSIXCHECK
1055# undef fmodl
1056# if HAVE_RAW_DECL_FMODL
1057_GL_WARN_ON_USE (fmodl, "fmodl is unportable - "
1058                 "use gnulib module fmodl for portability");
1059# endif
1060#endif
1061
1062
1063/* Write x as
1064     x = mantissa * 2^exp
1065   where
1066     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
1067     If x is zero: mantissa = x, exp = 0.
1068     If x is infinite or NaN: mantissa = x, exp unspecified.
1069   Store exp in *EXPPTR and return mantissa.  */
1070#if @GNULIB_FREXPF@
1071# if @REPLACE_FREXPF@
1072#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1073#   undef frexpf
1074#   define frexpf rpl_frexpf
1075#  endif
1076_GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
1077_GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr));
1078# else
1079#  if !@HAVE_FREXPF@
1080#   undef frexpf
1081_GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
1082#  endif
1083_GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr));
1084# endif
1085_GL_CXXALIASWARN (frexpf);
1086#elif defined GNULIB_POSIXCHECK
1087# undef frexpf
1088# if HAVE_RAW_DECL_FREXPF
1089_GL_WARN_ON_USE (frexpf, "frexpf is unportable - "
1090                 "use gnulib module frexpf for portability");
1091# endif
1092#endif
1093
1094/* Write x as
1095     x = mantissa * 2^exp
1096   where
1097     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
1098     If x is zero: mantissa = x, exp = 0.
1099     If x is infinite or NaN: mantissa = x, exp unspecified.
1100   Store exp in *EXPPTR and return mantissa.  */
1101#if @GNULIB_FREXP@
1102# if @REPLACE_FREXP@
1103#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1104#   undef frexp
1105#   define frexp rpl_frexp
1106#  endif
1107_GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2)));
1108_GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr));
1109# else
1110_GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr));
1111# endif
1112# if __GLIBC__ >= 2
1113_GL_CXXALIASWARN1 (frexp, double, (double x, int *expptr));
1114# endif
1115#elif defined GNULIB_POSIXCHECK
1116# undef frexp
1117/* Assume frexp is always declared.  */
1118_GL_WARN_ON_USE (frexp, "frexp is unportable - "
1119                 "use gnulib module frexp for portability");
1120#endif
1121
1122/* Write x as
1123     x = mantissa * 2^exp
1124   where
1125     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
1126     If x is zero: mantissa = x, exp = 0.
1127     If x is infinite or NaN: mantissa = x, exp unspecified.
1128   Store exp in *EXPPTR and return mantissa.  */
1129#if @GNULIB_FREXPL@ && @REPLACE_FREXPL@
1130# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1131#  undef frexpl
1132#  define frexpl rpl_frexpl
1133# endif
1134_GL_FUNCDECL_RPL (frexpl, long double,
1135                  (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
1136_GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr));
1137#else
1138# if !@HAVE_DECL_FREXPL@
1139_GL_FUNCDECL_SYS (frexpl, long double,
1140                  (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
1141# endif
1142# if @GNULIB_FREXPL@
1143_GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr));
1144# endif
1145#endif
1146#if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@)
1147_GL_CXXALIASWARN (frexpl);
1148#endif
1149#if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK
1150# undef frexpl
1151# if HAVE_RAW_DECL_FREXPL
1152_GL_WARN_ON_USE (frexpl, "frexpl is unportable - "
1153                 "use gnulib module frexpl for portability");
1154# endif
1155#endif
1156
1157
1158/* Return sqrt(x^2+y^2).  */
1159#if @GNULIB_HYPOTF@
1160# if @REPLACE_HYPOTF@
1161#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1162#   undef hypotf
1163#   define hypotf rpl_hypotf
1164#  endif
1165_GL_FUNCDECL_RPL (hypotf, float, (float x, float y));
1166_GL_CXXALIAS_RPL (hypotf, float, (float x, float y));
1167# else
1168#  if !@HAVE_HYPOTF@
1169_GL_FUNCDECL_SYS (hypotf, float, (float x, float y));
1170#  endif
1171_GL_CXXALIAS_SYS (hypotf, float, (float x, float y));
1172# endif
1173_GL_CXXALIASWARN (hypotf);
1174#elif defined GNULIB_POSIXCHECK
1175# undef hypotf
1176# if HAVE_RAW_DECL_HYPOTF
1177_GL_WARN_ON_USE (hypotf, "hypotf is unportable - "
1178                 "use gnulib module hypotf for portability");
1179# endif
1180#endif
1181
1182/* Return sqrt(x^2+y^2).  */
1183#if @GNULIB_HYPOT@
1184# if @REPLACE_HYPOT@
1185#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1186#   undef hypot
1187#   define hypot rpl_hypot
1188#  endif
1189_GL_FUNCDECL_RPL (hypot, double, (double x, double y));
1190_GL_CXXALIAS_RPL (hypot, double, (double x, double y));
1191# else
1192_GL_CXXALIAS_SYS (hypot, double, (double x, double y));
1193# endif
1194# if __GLIBC__ >= 2
1195_GL_CXXALIASWARN (hypot);
1196# endif
1197#elif defined GNULIB_POSIXCHECK
1198# undef hypot
1199# if HAVE_RAW_DECL_HYPOT
1200_GL_WARN_ON_USE (hypotf, "hypot has portability problems - "
1201                 "use gnulib module hypot for portability");
1202# endif
1203#endif
1204
1205/* Return sqrt(x^2+y^2).  */
1206#if @GNULIB_HYPOTL@
1207# if @REPLACE_HYPOTL@
1208#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1209#   undef hypotl
1210#   define hypotl rpl_hypotl
1211#  endif
1212_GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y));
1213_GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y));
1214# else
1215#  if !@HAVE_HYPOTL@
1216_GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y));
1217#  endif
1218_GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y));
1219# endif
1220_GL_CXXALIASWARN (hypotl);
1221#elif defined GNULIB_POSIXCHECK
1222# undef hypotl
1223# if HAVE_RAW_DECL_HYPOTL
1224_GL_WARN_ON_USE (hypotl, "hypotl is unportable - "
1225                 "use gnulib module hypotl for portability");
1226# endif
1227#endif
1228
1229
1230#if @GNULIB_ILOGBF@
1231# if @REPLACE_ILOGBF@
1232#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1233#   undef ilogbf
1234#   define ilogbf rpl_ilogbf
1235#  endif
1236_GL_FUNCDECL_RPL (ilogbf, int, (float x));
1237_GL_CXXALIAS_RPL (ilogbf, int, (float x));
1238# else
1239#  if !@HAVE_ILOGBF@
1240_GL_FUNCDECL_SYS (ilogbf, int, (float x));
1241#  endif
1242_GL_CXXALIAS_SYS (ilogbf, int, (float x));
1243# endif
1244_GL_CXXALIASWARN (ilogbf);
1245#elif defined GNULIB_POSIXCHECK
1246# undef ilogbf
1247# if HAVE_RAW_DECL_ILOGBF
1248_GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - "
1249                 "use gnulib module ilogbf for portability");
1250# endif
1251#endif
1252
1253#if @GNULIB_ILOGB@
1254# if @REPLACE_ILOGB@
1255#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1256#   undef ilogb
1257#   define ilogb rpl_ilogb
1258#  endif
1259_GL_FUNCDECL_RPL (ilogb, int, (double x));
1260_GL_CXXALIAS_RPL (ilogb, int, (double x));
1261# else
1262#  if !@HAVE_ILOGB@
1263_GL_FUNCDECL_SYS (ilogb, int, (double x));
1264#  endif
1265_GL_CXXALIAS_SYS (ilogb, int, (double x));
1266# endif
1267# if __GLIBC__ >= 2
1268_GL_CXXALIASWARN (ilogb);
1269# endif
1270#elif defined GNULIB_POSIXCHECK
1271# undef ilogb
1272# if HAVE_RAW_DECL_ILOGB
1273_GL_WARN_ON_USE (ilogb, "ilogb is unportable - "
1274                 "use gnulib module ilogb for portability");
1275# endif
1276#endif
1277
1278#if @GNULIB_ILOGBL@
1279# if @REPLACE_ILOGBL@
1280#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1281#   undef ilogbl
1282#   define ilogbl rpl_ilogbl
1283#  endif
1284_GL_FUNCDECL_RPL (ilogbl, int, (long double x));
1285_GL_CXXALIAS_RPL (ilogbl, int, (long double x));
1286# else
1287#  if !@HAVE_ILOGBL@
1288_GL_FUNCDECL_SYS (ilogbl, int, (long double x));
1289#  endif
1290_GL_CXXALIAS_SYS (ilogbl, int, (long double x));
1291# endif
1292_GL_CXXALIASWARN (ilogbl);
1293#elif defined GNULIB_POSIXCHECK
1294# undef ilogbl
1295# if HAVE_RAW_DECL_ILOGBL
1296_GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - "
1297                 "use gnulib module ilogbl for portability");
1298# endif
1299#endif
1300
1301
1302/* Return x * 2^exp.  */
1303#if @GNULIB_LDEXPF@
1304# if !@HAVE_LDEXPF@
1305#  undef ldexpf
1306_GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp));
1307# endif
1308_GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp));
1309_GL_CXXALIASWARN (ldexpf);
1310#elif defined GNULIB_POSIXCHECK
1311# undef ldexpf
1312# if HAVE_RAW_DECL_LDEXPF
1313_GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - "
1314                 "use gnulib module ldexpf for portability");
1315# endif
1316#endif
1317
1318/* Return x * 2^exp.  */
1319#if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@
1320# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1321#  undef ldexpl
1322#  define ldexpl rpl_ldexpl
1323# endif
1324_GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp));
1325_GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp));
1326#else
1327# if !@HAVE_DECL_LDEXPL@
1328_GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp));
1329# endif
1330# if @GNULIB_LDEXPL@
1331_GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp));
1332# endif
1333#endif
1334#if @GNULIB_LDEXPL@
1335_GL_CXXALIASWARN (ldexpl);
1336#endif
1337#if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK
1338# undef ldexpl
1339# if HAVE_RAW_DECL_LDEXPL
1340_GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - "
1341                 "use gnulib module ldexpl for portability");
1342# endif
1343#endif
1344
1345
1346#if @GNULIB_LOGF@
1347# if @REPLACE_LOGF@
1348#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1349#   undef logf
1350#   define logf rpl_logf
1351#  endif
1352_GL_FUNCDECL_RPL (logf, float, (float x));
1353_GL_CXXALIAS_RPL (logf, float, (float x));
1354# else
1355#  if !@HAVE_LOGF@
1356#   undef logf
1357_GL_FUNCDECL_SYS (logf, float, (float x));
1358#  endif
1359_GL_CXXALIAS_SYS (logf, float, (float x));
1360# endif
1361_GL_CXXALIASWARN (logf);
1362#elif defined GNULIB_POSIXCHECK
1363# undef logf
1364# if HAVE_RAW_DECL_LOGF
1365_GL_WARN_ON_USE (logf, "logf is unportable - "
1366                 "use gnulib module logf for portability");
1367# endif
1368#endif
1369
1370#if @GNULIB_LOG@
1371# if @REPLACE_LOG@
1372#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1373#   undef log
1374#   define log rpl_log
1375#  endif
1376_GL_FUNCDECL_RPL (log, double, (double x));
1377_GL_CXXALIAS_RPL (log, double, (double x));
1378# else
1379_GL_CXXALIAS_SYS (log, double, (double x));
1380# endif
1381# if __GLIBC__ >= 2
1382_GL_CXXALIASWARN (log);
1383# endif
1384#elif defined GNULIB_POSIXCHECK
1385# undef log
1386# if HAVE_RAW_DECL_LOG
1387_GL_WARN_ON_USE (log, "log has portability problems - "
1388                 "use gnulib module log for portability");
1389# endif
1390#endif
1391
1392#if @GNULIB_LOGL@
1393# if @REPLACE_LOGL@
1394#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1395#   undef logl
1396#   define logl rpl_logl
1397#  endif
1398_GL_FUNCDECL_RPL (logl, long double, (long double x));
1399_GL_CXXALIAS_RPL (logl, long double, (long double x));
1400# else
1401#  if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@
1402#   undef logl
1403_GL_FUNCDECL_SYS (logl, long double, (long double x));
1404#  endif
1405_GL_CXXALIAS_SYS (logl, long double, (long double x));
1406# endif
1407_GL_CXXALIASWARN (logl);
1408#elif defined GNULIB_POSIXCHECK
1409# undef logl
1410# if HAVE_RAW_DECL_LOGL
1411_GL_WARN_ON_USE (logl, "logl is unportable - "
1412                 "use gnulib module logl for portability");
1413# endif
1414#endif
1415
1416
1417#if @GNULIB_LOG10F@
1418# if @REPLACE_LOG10F@
1419#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1420#   undef log10f
1421#   define log10f rpl_log10f
1422#  endif
1423_GL_FUNCDECL_RPL (log10f, float, (float x));
1424_GL_CXXALIAS_RPL (log10f, float, (float x));
1425# else
1426#  if !@HAVE_LOG10F@
1427#   undef log10f
1428_GL_FUNCDECL_SYS (log10f, float, (float x));
1429#  endif
1430_GL_CXXALIAS_SYS (log10f, float, (float x));
1431# endif
1432_GL_CXXALIASWARN (log10f);
1433#elif defined GNULIB_POSIXCHECK
1434# undef log10f
1435# if HAVE_RAW_DECL_LOG10F
1436_GL_WARN_ON_USE (log10f, "log10f is unportable - "
1437                 "use gnulib module log10f for portability");
1438# endif
1439#endif
1440
1441#if @GNULIB_LOG10@
1442# if @REPLACE_LOG10@
1443#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1444#   undef log10
1445#   define log10 rpl_log10
1446#  endif
1447_GL_FUNCDECL_RPL (log10, double, (double x));
1448_GL_CXXALIAS_RPL (log10, double, (double x));
1449# else
1450_GL_CXXALIAS_SYS (log10, double, (double x));
1451# endif
1452# if __GLIBC__ >= 2
1453_GL_CXXALIASWARN (log10);
1454# endif
1455#elif defined GNULIB_POSIXCHECK
1456# undef log10
1457# if HAVE_RAW_DECL_LOG10
1458_GL_WARN_ON_USE (log10, "log10 has portability problems - "
1459                 "use gnulib module log10 for portability");
1460# endif
1461#endif
1462
1463#if @GNULIB_LOG10L@
1464# if @REPLACE_LOG10L@
1465#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1466#   undef log10l
1467#   define log10l rpl_log10l
1468#  endif
1469_GL_FUNCDECL_RPL (log10l, long double, (long double x));
1470_GL_CXXALIAS_RPL (log10l, long double, (long double x));
1471# else
1472#  if !@HAVE_LOG10L@ || !@HAVE_DECL_LOG10L@
1473#   undef log10l
1474_GL_FUNCDECL_SYS (log10l, long double, (long double x));
1475#  endif
1476_GL_CXXALIAS_SYS (log10l, long double, (long double x));
1477# endif
1478_GL_CXXALIASWARN (log10l);
1479#elif defined GNULIB_POSIXCHECK
1480# undef log10l
1481# if HAVE_RAW_DECL_LOG10L
1482_GL_WARN_ON_USE (log10l, "log10l is unportable - "
1483                 "use gnulib module log10l for portability");
1484# endif
1485#endif
1486
1487
1488#if @GNULIB_LOG1PF@
1489# if @REPLACE_LOG1PF@
1490#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1491#   undef log1pf
1492#   define log1pf rpl_log1pf
1493#  endif
1494_GL_FUNCDECL_RPL (log1pf, float, (float x));
1495_GL_CXXALIAS_RPL (log1pf, float, (float x));
1496# else
1497#  if !@HAVE_LOG1PF@
1498_GL_FUNCDECL_SYS (log1pf, float, (float x));
1499#  endif
1500_GL_CXXALIAS_SYS (log1pf, float, (float x));
1501# endif
1502_GL_CXXALIASWARN (log1pf);
1503#elif defined GNULIB_POSIXCHECK
1504# undef log1pf
1505# if HAVE_RAW_DECL_LOG1PF
1506_GL_WARN_ON_USE (log1pf, "log1pf is unportable - "
1507                 "use gnulib module log1pf for portability");
1508# endif
1509#endif
1510
1511#if @GNULIB_LOG1P@
1512# if @REPLACE_LOG1P@
1513#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1514#   undef log1p
1515#   define log1p rpl_log1p
1516#  endif
1517_GL_FUNCDECL_RPL (log1p, double, (double x));
1518_GL_CXXALIAS_RPL (log1p, double, (double x));
1519# else
1520#  if !@HAVE_LOG1P@
1521_GL_FUNCDECL_SYS (log1p, double, (double x));
1522#  endif
1523_GL_CXXALIAS_SYS (log1p, double, (double x));
1524# endif
1525# if __GLIBC__ >= 2
1526_GL_CXXALIASWARN (log1p);
1527# endif
1528#elif defined GNULIB_POSIXCHECK
1529# undef log1p
1530# if HAVE_RAW_DECL_LOG1P
1531_GL_WARN_ON_USE (log1p, "log1p has portability problems - "
1532                 "use gnulib module log1p for portability");
1533# endif
1534#endif
1535
1536#if @GNULIB_LOG1PL@
1537# if @REPLACE_LOG1PL@
1538#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1539#   undef log1pl
1540#   define log1pl rpl_log1pl
1541#  endif
1542_GL_FUNCDECL_RPL (log1pl, long double, (long double x));
1543_GL_CXXALIAS_RPL (log1pl, long double, (long double x));
1544# else
1545#  if !@HAVE_LOG1PL@
1546_GL_FUNCDECL_SYS (log1pl, long double, (long double x));
1547#  endif
1548_GL_CXXALIAS_SYS (log1pl, long double, (long double x));
1549# endif
1550_GL_CXXALIASWARN (log1pl);
1551#elif defined GNULIB_POSIXCHECK
1552# undef log1pl
1553# if HAVE_RAW_DECL_LOG1PL
1554_GL_WARN_ON_USE (log1pl, "log1pl has portability problems - "
1555                 "use gnulib module log1pl for portability");
1556# endif
1557#endif
1558
1559
1560#if @GNULIB_LOG2F@
1561# if @REPLACE_LOG2F@
1562#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1563#   undef log2f
1564#   define log2f rpl_log2f
1565#  endif
1566_GL_FUNCDECL_RPL (log2f, float, (float x));
1567_GL_CXXALIAS_RPL (log2f, float, (float x));
1568# else
1569#  if !@HAVE_DECL_LOG2F@
1570#   undef log2f
1571_GL_FUNCDECL_SYS (log2f, float, (float x));
1572#  endif
1573_GL_CXXALIAS_SYS (log2f, float, (float x));
1574# endif
1575_GL_CXXALIASWARN (log2f);
1576#elif defined GNULIB_POSIXCHECK
1577# undef log2f
1578# if HAVE_RAW_DECL_LOG2F
1579_GL_WARN_ON_USE (log2f, "log2f is unportable - "
1580                 "use gnulib module log2f for portability");
1581# endif
1582#endif
1583
1584#if @GNULIB_LOG2@
1585# if @REPLACE_LOG2@
1586#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1587#   undef log2
1588#   define log2 rpl_log2
1589#  endif
1590_GL_FUNCDECL_RPL (log2, double, (double x));
1591_GL_CXXALIAS_RPL (log2, double, (double x));
1592# else
1593#  if !@HAVE_DECL_LOG2@
1594#   undef log2
1595_GL_FUNCDECL_SYS (log2, double, (double x));
1596#  endif
1597_GL_CXXALIAS_SYS (log2, double, (double x));
1598# endif
1599# if __GLIBC__ >= 2
1600_GL_CXXALIASWARN (log2);
1601# endif
1602#elif defined GNULIB_POSIXCHECK
1603# undef log2
1604# if HAVE_RAW_DECL_LOG2
1605_GL_WARN_ON_USE (log2, "log2 is unportable - "
1606                 "use gnulib module log2 for portability");
1607# endif
1608#endif
1609
1610#if @GNULIB_LOG2L@
1611# if @REPLACE_LOG2L@
1612#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1613#   undef log2l
1614#   define log2l rpl_log2l
1615#  endif
1616_GL_FUNCDECL_RPL (log2l, long double, (long double x));
1617_GL_CXXALIAS_RPL (log2l, long double, (long double x));
1618# else
1619#  if !@HAVE_DECL_LOG2L@
1620_GL_FUNCDECL_SYS (log2l, long double, (long double x));
1621#  endif
1622_GL_CXXALIAS_SYS (log2l, long double, (long double x));
1623# endif
1624_GL_CXXALIASWARN (log2l);
1625#elif defined GNULIB_POSIXCHECK
1626# undef log2l
1627# if HAVE_RAW_DECL_LOG2L
1628_GL_WARN_ON_USE (log2l, "log2l is unportable - "
1629                 "use gnulib module log2l for portability");
1630# endif
1631#endif
1632
1633
1634#if @GNULIB_LOGBF@
1635# if @REPLACE_LOGBF@
1636#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1637#   undef logbf
1638#   define logbf rpl_logbf
1639#  endif
1640_GL_FUNCDECL_RPL (logbf, float, (float x));
1641_GL_CXXALIAS_RPL (logbf, float, (float x));
1642# else
1643#  if !@HAVE_LOGBF@
1644_GL_FUNCDECL_SYS (logbf, float, (float x));
1645#  endif
1646_GL_CXXALIAS_SYS (logbf, float, (float x));
1647# endif
1648_GL_CXXALIASWARN (logbf);
1649#elif defined GNULIB_POSIXCHECK
1650# undef logbf
1651# if HAVE_RAW_DECL_LOGBF
1652_GL_WARN_ON_USE (logbf, "logbf is unportable - "
1653                 "use gnulib module logbf for portability");
1654# endif
1655#endif
1656
1657#if @GNULIB_LOGB@
1658# if @REPLACE_LOGB@
1659#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1660#   undef logb
1661#   define logb rpl_logb
1662#  endif
1663_GL_FUNCDECL_RPL (logb, double, (double x));
1664_GL_CXXALIAS_RPL (logb, double, (double x));
1665# else
1666#  if !@HAVE_DECL_LOGB@
1667_GL_FUNCDECL_SYS (logb, double, (double x));
1668#  endif
1669_GL_CXXALIAS_SYS (logb, double, (double x));
1670# endif
1671# if __GLIBC__ >= 2
1672_GL_CXXALIASWARN (logb);
1673# endif
1674#elif defined GNULIB_POSIXCHECK
1675# undef logb
1676# if HAVE_RAW_DECL_LOGB
1677_GL_WARN_ON_USE (logb, "logb is unportable - "
1678                 "use gnulib module logb for portability");
1679# endif
1680#endif
1681
1682#if @GNULIB_LOGBL@
1683# if @REPLACE_LOGBL@
1684#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1685#   undef logbl
1686#   define logbl rpl_logbl
1687#  endif
1688_GL_FUNCDECL_RPL (logbl, long double, (long double x));
1689_GL_CXXALIAS_RPL (logbl, long double, (long double x));
1690# else
1691#  if !@HAVE_LOGBL@
1692_GL_FUNCDECL_SYS (logbl, long double, (long double x));
1693#  endif
1694_GL_CXXALIAS_SYS (logbl, long double, (long double x));
1695# endif
1696_GL_CXXALIASWARN (logbl);
1697#elif defined GNULIB_POSIXCHECK
1698# undef logbl
1699# if HAVE_RAW_DECL_LOGBL
1700_GL_WARN_ON_USE (logbl, "logbl is unportable - "
1701                 "use gnulib module logbl for portability");
1702# endif
1703#endif
1704
1705
1706#if @GNULIB_MODFF@
1707# if @REPLACE_MODFF@
1708#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1709#   undef modff
1710#   define modff rpl_modff
1711#  endif
1712_GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
1713_GL_CXXALIAS_RPL (modff, float, (float x, float *iptr));
1714# else
1715#  if !@HAVE_MODFF@
1716#   undef modff
1717_GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
1718#  endif
1719_GL_CXXALIAS_SYS (modff, float, (float x, float *iptr));
1720# endif
1721_GL_CXXALIASWARN (modff);
1722#elif defined GNULIB_POSIXCHECK
1723# undef modff
1724# if HAVE_RAW_DECL_MODFF
1725_GL_WARN_ON_USE (modff, "modff is unportable - "
1726                 "use gnulib module modff for portability");
1727# endif
1728#endif
1729
1730#if @GNULIB_MODF@
1731# if @REPLACE_MODF@
1732#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1733#   undef modf
1734#   define modf rpl_modf
1735#  endif
1736_GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2)));
1737_GL_CXXALIAS_RPL (modf, double, (double x, double *iptr));
1738# else
1739_GL_CXXALIAS_SYS (modf, double, (double x, double *iptr));
1740# endif
1741# if __GLIBC__ >= 2
1742_GL_CXXALIASWARN (modf);
1743# endif
1744#elif defined GNULIB_POSIXCHECK
1745# undef modf
1746# if HAVE_RAW_DECL_MODF
1747_GL_WARN_ON_USE (modf, "modf has portability problems - "
1748                 "use gnulib module modf for portability");
1749# endif
1750#endif
1751
1752#if @GNULIB_MODFL@
1753# if @REPLACE_MODFL@
1754#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1755#   undef modfl
1756#   define modfl rpl_modfl
1757#  endif
1758_GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr)
1759                                      _GL_ARG_NONNULL ((2)));
1760_GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr));
1761# else
1762#  if !@HAVE_MODFL@
1763#   undef modfl
1764_GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr)
1765                                      _GL_ARG_NONNULL ((2)));
1766#  endif
1767_GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr));
1768# endif
1769_GL_CXXALIASWARN (modfl);
1770#elif defined GNULIB_POSIXCHECK
1771# undef modfl
1772# if HAVE_RAW_DECL_MODFL
1773_GL_WARN_ON_USE (modfl, "modfl is unportable - "
1774                 "use gnulib module modfl for portability");
1775# endif
1776#endif
1777
1778
1779#if @GNULIB_POWF@
1780# if !@HAVE_POWF@
1781#  undef powf
1782_GL_FUNCDECL_SYS (powf, float, (float x, float y));
1783# endif
1784_GL_CXXALIAS_SYS (powf, float, (float x, float y));
1785_GL_CXXALIASWARN (powf);
1786#elif defined GNULIB_POSIXCHECK
1787# undef powf
1788# if HAVE_RAW_DECL_POWF
1789_GL_WARN_ON_USE (powf, "powf is unportable - "
1790                 "use gnulib module powf for portability");
1791# endif
1792#endif
1793
1794
1795#if @GNULIB_REMAINDERF@
1796# if @REPLACE_REMAINDERF@
1797#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1798#   undef remainderf
1799#   define remainderf rpl_remainderf
1800#  endif
1801_GL_FUNCDECL_RPL (remainderf, float, (float x, float y));
1802_GL_CXXALIAS_RPL (remainderf, float, (float x, float y));
1803# else
1804#  if !@HAVE_REMAINDERF@
1805_GL_FUNCDECL_SYS (remainderf, float, (float x, float y));
1806#  endif
1807_GL_CXXALIAS_SYS (remainderf, float, (float x, float y));
1808# endif
1809_GL_CXXALIASWARN (remainderf);
1810#elif defined GNULIB_POSIXCHECK
1811# undef remainderf
1812# if HAVE_RAW_DECL_REMAINDERF
1813_GL_WARN_ON_USE (remainderf, "remainderf is unportable - "
1814                 "use gnulib module remainderf for portability");
1815# endif
1816#endif
1817
1818#if @GNULIB_REMAINDER@
1819# if @REPLACE_REMAINDER@
1820#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1821#   undef remainder
1822#   define remainder rpl_remainder
1823#  endif
1824_GL_FUNCDECL_RPL (remainder, double, (double x, double y));
1825_GL_CXXALIAS_RPL (remainder, double, (double x, double y));
1826# else
1827#  if !@HAVE_REMAINDER@ || !@HAVE_DECL_REMAINDER@
1828_GL_FUNCDECL_SYS (remainder, double, (double x, double y));
1829#  endif
1830_GL_CXXALIAS_SYS (remainder, double, (double x, double y));
1831# endif
1832# if __GLIBC__ >= 2
1833_GL_CXXALIASWARN (remainder);
1834# endif
1835#elif defined GNULIB_POSIXCHECK
1836# undef remainder
1837# if HAVE_RAW_DECL_REMAINDER
1838_GL_WARN_ON_USE (remainder, "remainder is unportable - "
1839                 "use gnulib module remainder for portability");
1840# endif
1841#endif
1842
1843#if @GNULIB_REMAINDERL@
1844# if @REPLACE_REMAINDERL@
1845#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1846#   undef remainderl
1847#   define remainderl rpl_remainderl
1848#  endif
1849_GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y));
1850_GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y));
1851# else
1852#  if !@HAVE_DECL_REMAINDERL@
1853#   undef remainderl
1854#   if !(defined __cplusplus && defined _AIX)
1855_GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y));
1856#   endif
1857#  endif
1858_GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y));
1859# endif
1860_GL_CXXALIASWARN (remainderl);
1861#elif defined GNULIB_POSIXCHECK
1862# undef remainderl
1863# if HAVE_RAW_DECL_REMAINDERL
1864_GL_WARN_ON_USE (remainderl, "remainderl is unportable - "
1865                 "use gnulib module remainderl for portability");
1866# endif
1867#endif
1868
1869
1870#if @GNULIB_RINTF@
1871# if !@HAVE_DECL_RINTF@
1872_GL_FUNCDECL_SYS (rintf, float, (float x));
1873# endif
1874_GL_CXXALIAS_SYS (rintf, float, (float x));
1875_GL_CXXALIASWARN (rintf);
1876#elif defined GNULIB_POSIXCHECK
1877# undef rintf
1878# if HAVE_RAW_DECL_RINTF
1879_GL_WARN_ON_USE (rintf, "rintf is unportable - "
1880                 "use gnulib module rintf for portability");
1881# endif
1882#endif
1883
1884#if @GNULIB_RINT@
1885# if !@HAVE_RINT@
1886_GL_FUNCDECL_SYS (rint, double, (double x));
1887# endif
1888_GL_CXXALIAS_SYS (rint, double, (double x));
1889# if __GLIBC__ >= 2
1890_GL_CXXALIASWARN (rint);
1891# endif
1892#elif defined GNULIB_POSIXCHECK
1893# undef rint
1894# if HAVE_RAW_DECL_RINT
1895_GL_WARN_ON_USE (rint, "rint is unportable - "
1896                 "use gnulib module rint for portability");
1897# endif
1898#endif
1899
1900#if @GNULIB_RINTL@
1901# if @REPLACE_RINTL@
1902#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1903#   undef rintl
1904#   define rintl rpl_rintl
1905#  endif
1906_GL_FUNCDECL_RPL (rintl, long double, (long double x));
1907_GL_CXXALIAS_RPL (rintl, long double, (long double x));
1908# else
1909#  if !@HAVE_RINTL@
1910_GL_FUNCDECL_SYS (rintl, long double, (long double x));
1911#  endif
1912_GL_CXXALIAS_SYS (rintl, long double, (long double x));
1913# endif
1914_GL_CXXALIASWARN (rintl);
1915#elif defined GNULIB_POSIXCHECK
1916# undef rintl
1917# if HAVE_RAW_DECL_RINTL
1918_GL_WARN_ON_USE (rintl, "rintl is unportable - "
1919                 "use gnulib module rintl for portability");
1920# endif
1921#endif
1922
1923
1924#if @GNULIB_ROUNDF@
1925# if @REPLACE_ROUNDF@
1926#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1927#   undef roundf
1928#   define roundf rpl_roundf
1929#  endif
1930_GL_FUNCDECL_RPL (roundf, float, (float x));
1931_GL_CXXALIAS_RPL (roundf, float, (float x));
1932# else
1933#  if !@HAVE_DECL_ROUNDF@
1934_GL_FUNCDECL_SYS (roundf, float, (float x));
1935#  endif
1936_GL_CXXALIAS_SYS (roundf, float, (float x));
1937# endif
1938_GL_CXXALIASWARN (roundf);
1939#elif defined GNULIB_POSIXCHECK
1940# undef roundf
1941# if HAVE_RAW_DECL_ROUNDF
1942_GL_WARN_ON_USE (roundf, "roundf is unportable - "
1943                 "use gnulib module roundf for portability");
1944# endif
1945#endif
1946
1947#if @GNULIB_ROUND@
1948# if @REPLACE_ROUND@
1949#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1950#   undef round
1951#   define round rpl_round
1952#  endif
1953_GL_FUNCDECL_RPL (round, double, (double x));
1954_GL_CXXALIAS_RPL (round, double, (double x));
1955# else
1956#  if !@HAVE_DECL_ROUND@
1957_GL_FUNCDECL_SYS (round, double, (double x));
1958#  endif
1959_GL_CXXALIAS_SYS (round, double, (double x));
1960# endif
1961# if __GLIBC__ >= 2
1962_GL_CXXALIASWARN (round);
1963# endif
1964#elif defined GNULIB_POSIXCHECK
1965# undef round
1966# if HAVE_RAW_DECL_ROUND
1967_GL_WARN_ON_USE (round, "round is unportable - "
1968                 "use gnulib module round for portability");
1969# endif
1970#endif
1971
1972#if @GNULIB_ROUNDL@
1973# if @REPLACE_ROUNDL@
1974#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1975#   undef roundl
1976#   define roundl rpl_roundl
1977#  endif
1978_GL_FUNCDECL_RPL (roundl, long double, (long double x));
1979_GL_CXXALIAS_RPL (roundl, long double, (long double x));
1980# else
1981#  if !@HAVE_DECL_ROUNDL@
1982#   undef roundl
1983#   if !(defined __cplusplus && defined _AIX)
1984_GL_FUNCDECL_SYS (roundl, long double, (long double x));
1985#   endif
1986#  endif
1987_GL_CXXALIAS_SYS (roundl, long double, (long double x));
1988# endif
1989_GL_CXXALIASWARN (roundl);
1990#elif defined GNULIB_POSIXCHECK
1991# undef roundl
1992# if HAVE_RAW_DECL_ROUNDL
1993_GL_WARN_ON_USE (roundl, "roundl is unportable - "
1994                 "use gnulib module roundl for portability");
1995# endif
1996#endif
1997
1998
1999#if @GNULIB_SINF@
2000# if @REPLACE_SINF@
2001#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
2002#   undef sinf
2003#   define sinf rpl_sinf
2004#  endif
2005_GL_FUNCDECL_RPL (sinf, float, (float x));
2006_GL_CXXALIAS_RPL (sinf, float, (float x));
2007# else
2008#  if !@HAVE_SINF@
2009 #  undef sinf
2010_GL_FUNCDECL_SYS (sinf, float, (float x));
2011#  endif
2012_GL_CXXALIAS_SYS (sinf, float, (float x));
2013# endif
2014_GL_CXXALIASWARN (sinf);
2015#elif defined GNULIB_POSIXCHECK
2016# undef sinf
2017# if HAVE_RAW_DECL_SINF
2018_GL_WARN_ON_USE (sinf, "sinf is unportable - "
2019                 "use gnulib module sinf for portability");
2020# endif
2021#endif
2022
2023#if @GNULIB_SINL@
2024# if !@HAVE_SINL@ || !@HAVE_DECL_SINL@
2025#  undef sinl
2026_GL_FUNCDECL_SYS (sinl, long double, (long double x));
2027# endif
2028_GL_CXXALIAS_SYS (sinl, long double, (long double x));
2029_GL_CXXALIASWARN (sinl);
2030#elif defined GNULIB_POSIXCHECK
2031# undef sinl
2032# if HAVE_RAW_DECL_SINL
2033_GL_WARN_ON_USE (sinl, "sinl is unportable - "
2034                 "use gnulib module sinl for portability");
2035# endif
2036#endif
2037
2038
2039#if @GNULIB_SINHF@
2040# if @REPLACE_SINHF@
2041#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
2042#   undef sinhf
2043#   define sinhf rpl_sinhf
2044#  endif
2045_GL_FUNCDECL_RPL (sinhf, float, (float x));
2046_GL_CXXALIAS_RPL (sinhf, float, (float x));
2047# else
2048#  if !@HAVE_SINHF@
2049#   undef sinhf
2050_GL_FUNCDECL_SYS (sinhf, float, (float x));
2051#  endif
2052_GL_CXXALIAS_SYS (sinhf, float, (float x));
2053# endif
2054_GL_CXXALIASWARN (sinhf);
2055#elif defined GNULIB_POSIXCHECK
2056# undef sinhf
2057# if HAVE_RAW_DECL_SINHF
2058_GL_WARN_ON_USE (sinhf, "sinhf is unportable - "
2059                 "use gnulib module sinhf for portability");
2060# endif
2061#endif
2062
2063
2064#if @GNULIB_SQRTF@
2065# if @REPLACE_SQRTF@
2066#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
2067#   undef sqrtf
2068#   define sqrtf rpl_sqrtf
2069#  endif
2070_GL_FUNCDECL_RPL (sqrtf, float, (float x));
2071_GL_CXXALIAS_RPL (sqrtf, float, (float x));
2072# else
2073#  if !@HAVE_SQRTF@
2074#   undef sqrtf
2075_GL_FUNCDECL_SYS (sqrtf, float, (float x));
2076#  endif
2077_GL_CXXALIAS_SYS (sqrtf, float, (float x));
2078# endif
2079_GL_CXXALIASWARN (sqrtf);
2080#elif defined GNULIB_POSIXCHECK
2081# undef sqrtf
2082# if HAVE_RAW_DECL_SQRTF
2083_GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - "
2084                 "use gnulib module sqrtf for portability");
2085# endif
2086#endif
2087
2088#if @GNULIB_SQRTL@
2089# if @REPLACE_SQRTL@
2090#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
2091#   undef sqrtl
2092#   define sqrtl rpl_sqrtl
2093#  endif
2094_GL_FUNCDECL_RPL (sqrtl, long double, (long double x));
2095_GL_CXXALIAS_RPL (sqrtl, long double, (long double x));
2096# else
2097#  if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@
2098#   undef sqrtl
2099_GL_FUNCDECL_SYS (sqrtl, long double, (long double x));
2100#  endif
2101_GL_CXXALIAS_SYS (sqrtl, long double, (long double x));
2102# endif
2103_GL_CXXALIASWARN (sqrtl);
2104#elif defined GNULIB_POSIXCHECK
2105# undef sqrtl
2106# if HAVE_RAW_DECL_SQRTL
2107_GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - "
2108                 "use gnulib module sqrtl for portability");
2109# endif
2110#endif
2111
2112
2113#if @GNULIB_TANF@
2114# if @REPLACE_TANF@
2115#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
2116#   undef tanf
2117#   define tanf rpl_tanf
2118#  endif
2119_GL_FUNCDECL_RPL (tanf, float, (float x));
2120_GL_CXXALIAS_RPL (tanf, float, (float x));
2121# else
2122#  if !@HAVE_TANF@
2123#   undef tanf
2124_GL_FUNCDECL_SYS (tanf, float, (float x));
2125#  endif
2126_GL_CXXALIAS_SYS (tanf, float, (float x));
2127# endif
2128_GL_CXXALIASWARN (tanf);
2129#elif defined GNULIB_POSIXCHECK
2130# undef tanf
2131# if HAVE_RAW_DECL_TANF
2132_GL_WARN_ON_USE (tanf, "tanf is unportable - "
2133                 "use gnulib module tanf for portability");
2134# endif
2135#endif
2136
2137#if @GNULIB_TANL@
2138# if !@HAVE_TANL@ || !@HAVE_DECL_TANL@
2139#  undef tanl
2140_GL_FUNCDECL_SYS (tanl, long double, (long double x));
2141# endif
2142_GL_CXXALIAS_SYS (tanl, long double, (long double x));
2143_GL_CXXALIASWARN (tanl);
2144#elif defined GNULIB_POSIXCHECK
2145# undef tanl
2146# if HAVE_RAW_DECL_TANL
2147_GL_WARN_ON_USE (tanl, "tanl is unportable - "
2148                 "use gnulib module tanl for portability");
2149# endif
2150#endif
2151
2152
2153#if @GNULIB_TANHF@
2154# if @REPLACE_TANHF@
2155#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
2156#   undef tanhf
2157#   define tanhf rpl_tanhf
2158#  endif
2159_GL_FUNCDECL_RPL (tanhf, float, (float x));
2160_GL_CXXALIAS_RPL (tanhf, float, (float x));
2161# else
2162#  if !@HAVE_TANHF@
2163#   undef tanhf
2164_GL_FUNCDECL_SYS (tanhf, float, (float x));
2165#  endif
2166_GL_CXXALIAS_SYS (tanhf, float, (float x));
2167# endif
2168_GL_CXXALIASWARN (tanhf);
2169#elif defined GNULIB_POSIXCHECK
2170# undef tanhf
2171# if HAVE_RAW_DECL_TANHF
2172_GL_WARN_ON_USE (tanhf, "tanhf is unportable - "
2173                 "use gnulib module tanhf for portability");
2174# endif
2175#endif
2176
2177
2178#if @GNULIB_TRUNCF@
2179# if @REPLACE_TRUNCF@
2180#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
2181#   undef truncf
2182#   define truncf rpl_truncf
2183#  endif
2184_GL_FUNCDECL_RPL (truncf, float, (float x));
2185_GL_CXXALIAS_RPL (truncf, float, (float x));
2186# else
2187#  if !@HAVE_DECL_TRUNCF@
2188_GL_FUNCDECL_SYS (truncf, float, (float x));
2189#  endif
2190_GL_CXXALIAS_SYS (truncf, float, (float x));
2191# endif
2192_GL_CXXALIASWARN (truncf);
2193#elif defined GNULIB_POSIXCHECK
2194# undef truncf
2195# if HAVE_RAW_DECL_TRUNCF
2196_GL_WARN_ON_USE (truncf, "truncf is unportable - "
2197                 "use gnulib module truncf for portability");
2198# endif
2199#endif
2200
2201#if @GNULIB_TRUNC@
2202# if @REPLACE_TRUNC@
2203#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
2204#   undef trunc
2205#   define trunc rpl_trunc
2206#  endif
2207_GL_FUNCDECL_RPL (trunc, double, (double x));
2208_GL_CXXALIAS_RPL (trunc, double, (double x));
2209# else
2210#  if !@HAVE_DECL_TRUNC@
2211_GL_FUNCDECL_SYS (trunc, double, (double x));
2212#  endif
2213_GL_CXXALIAS_SYS (trunc, double, (double x));
2214# endif
2215# if __GLIBC__ >= 2
2216_GL_CXXALIASWARN (trunc);
2217# endif
2218#elif defined GNULIB_POSIXCHECK
2219# undef trunc
2220# if HAVE_RAW_DECL_TRUNC
2221_GL_WARN_ON_USE (trunc, "trunc is unportable - "
2222                 "use gnulib module trunc for portability");
2223# endif
2224#endif
2225
2226#if @GNULIB_TRUNCL@
2227# if @REPLACE_TRUNCL@
2228#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
2229#   undef truncl
2230#   define truncl rpl_truncl
2231#  endif
2232_GL_FUNCDECL_RPL (truncl, long double, (long double x));
2233_GL_CXXALIAS_RPL (truncl, long double, (long double x));
2234# else
2235#  if !@HAVE_DECL_TRUNCL@
2236_GL_FUNCDECL_SYS (truncl, long double, (long double x));
2237#  endif
2238_GL_CXXALIAS_SYS (truncl, long double, (long double x));
2239# endif
2240_GL_CXXALIASWARN (truncl);
2241#elif defined GNULIB_POSIXCHECK
2242# undef truncl
2243# if HAVE_RAW_DECL_TRUNCL
2244_GL_WARN_ON_USE (truncl, "truncl is unportable - "
2245                 "use gnulib module truncl for portability");
2246# endif
2247#endif
2248
2249
2250/* Definitions of function-like macros come here, after the function
2251   declarations.  */
2252
2253
2254#if @GNULIB_ISFINITE@
2255# if @REPLACE_ISFINITE@
2256_GL_EXTERN_C int gl_isfinitef (float x);
2257_GL_EXTERN_C int gl_isfinited (double x);
2258_GL_EXTERN_C int gl_isfinitel (long double x);
2259#  undef isfinite
2260#  define isfinite(x) \
2261   (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \
2262    sizeof (x) == sizeof (double) ? gl_isfinited (x) : \
2263    gl_isfinitef (x))
2264# endif
2265# ifdef __cplusplus
2266#  if defined isfinite || defined GNULIB_NAMESPACE
2267_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite)
2268#   undef isfinite
2269#   if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined _AIX))
2270  /* This platform's <cmath> possibly defines isfinite through a set of inline
2271     functions.  */
2272_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, rpl_isfinite, bool)
2273#    define isfinite rpl_isfinite
2274#   else
2275_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, isfinite, bool)
2276#   endif
2277#  endif
2278# endif
2279#elif defined GNULIB_POSIXCHECK
2280# if defined isfinite
2281_GL_WARN_REAL_FLOATING_DECL (isfinite);
2282#  undef isfinite
2283#  define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x)
2284# endif
2285#endif
2286
2287
2288#if @GNULIB_ISINF@
2289# if @REPLACE_ISINF@
2290_GL_EXTERN_C int gl_isinff (float x);
2291_GL_EXTERN_C int gl_isinfd (double x);
2292_GL_EXTERN_C int gl_isinfl (long double x);
2293#  undef isinf
2294#  define isinf(x) \
2295   (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \
2296    sizeof (x) == sizeof (double) ? gl_isinfd (x) : \
2297    gl_isinff (x))
2298# endif
2299# ifdef __cplusplus
2300#  if defined isinf || defined GNULIB_NAMESPACE
2301_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf)
2302#   undef isinf
2303#   if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__))
2304  /* This platform's <cmath> possibly defines isinf through a set of inline
2305     functions.  */
2306_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, rpl_isinf, bool)
2307#    define isinf rpl_isinf
2308#   else
2309_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, isinf, bool)
2310#   endif
2311#  endif
2312# endif
2313#elif defined GNULIB_POSIXCHECK
2314# if defined isinf
2315_GL_WARN_REAL_FLOATING_DECL (isinf);
2316#  undef isinf
2317#  define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x)
2318# endif
2319#endif
2320
2321
2322#if @GNULIB_ISNANF@
2323/* Test for NaN for 'float' numbers.  */
2324# if @HAVE_ISNANF@
2325/* The original <math.h> included above provides a declaration of isnan macro
2326   or (older) isnanf function.  */
2327#  if __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanf))
2328    /* GCC 4.0 and newer provides three built-ins for isnan.  */
2329#   undef isnanf
2330#   define isnanf(x) __builtin_isnanf ((float)(x))
2331#  elif defined isnan
2332#   undef isnanf
2333#   define isnanf(x) isnan ((float)(x))
2334#  endif
2335# else
2336/* Test whether X is a NaN.  */
2337#  undef isnanf
2338#  define isnanf rpl_isnanf
2339_GL_EXTERN_C int isnanf (float x);
2340# endif
2341#endif
2342
2343#if @GNULIB_ISNAND@
2344/* Test for NaN for 'double' numbers.
2345   This function is a gnulib extension, unlike isnan() which applied only
2346   to 'double' numbers earlier but now is a type-generic macro.  */
2347# if @HAVE_ISNAND@
2348/* The original <math.h> included above provides a declaration of isnan
2349   macro.  */
2350#  if __GNUC__ >= 4
2351    /* GCC 4.0 and newer provides three built-ins for isnan.  */
2352#   undef isnand
2353#   define isnand(x) __builtin_isnan ((double)(x))
2354#  else
2355#   undef isnand
2356#   define isnand(x) isnan ((double)(x))
2357#  endif
2358# else
2359/* Test whether X is a NaN.  */
2360#  undef isnand
2361#  define isnand rpl_isnand
2362_GL_EXTERN_C int isnand (double x);
2363# endif
2364#endif
2365
2366#if @GNULIB_ISNANL@
2367/* Test for NaN for 'long double' numbers.  */
2368# if @HAVE_ISNANL@
2369/* The original <math.h> included above provides a declaration of isnan
2370   macro or (older) isnanl function.  */
2371#  if __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanl))
2372    /* GCC 4.0 and newer provides three built-ins for isnan.  */
2373#   undef isnanl
2374#   define isnanl(x) __builtin_isnanl ((long double)(x))
2375#  elif defined isnan
2376#   undef isnanl
2377#   define isnanl(x) isnan ((long double)(x))
2378#  endif
2379# else
2380/* Test whether X is a NaN.  */
2381#  undef isnanl
2382#  define isnanl rpl_isnanl
2383_GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST;
2384# endif
2385#endif
2386
2387/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL!  */
2388#if @GNULIB_ISNAN@
2389# if @REPLACE_ISNAN@
2390/* We can't just use the isnanf macro (e.g.) as exposed by
2391   isnanf.h (e.g.) here, because those may end up being macros
2392   that recursively expand back to isnan.  So use the gnulib
2393   replacements for them directly. */
2394#  if @HAVE_ISNANF@ && __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanf))
2395#   define gl_isnan_f(x) __builtin_isnanf ((float)(x))
2396#  else
2397_GL_EXTERN_C int rpl_isnanf (float x);
2398#   define gl_isnan_f(x) rpl_isnanf (x)
2399#  endif
2400#  if @HAVE_ISNAND@ && __GNUC__ >= 4
2401#   define gl_isnan_d(x) __builtin_isnan ((double)(x))
2402#  else
2403_GL_EXTERN_C int rpl_isnand (double x);
2404#   define gl_isnan_d(x) rpl_isnand (x)
2405#  endif
2406#  if @HAVE_ISNANL@ && __GNUC__ >= 4 && (!defined __clang__ || __has_builtin (__builtin_isnanl))
2407#   define gl_isnan_l(x) __builtin_isnanl ((long double)(x))
2408#  else
2409_GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST;
2410#   define gl_isnan_l(x) rpl_isnanl (x)
2411#  endif
2412#  undef isnan
2413#  define isnan(x) \
2414   (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \
2415    sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \
2416    gl_isnan_f (x))
2417# elif __GNUC__ >= 4 && (!defined __clang__ || (__has_builtin (__builtin_isnanf) && __has_builtin (__builtin_isnanl)))
2418#  undef isnan
2419#  define isnan(x) \
2420   (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \
2421    sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \
2422    __builtin_isnanf ((float)(x)))
2423# endif
2424# ifdef __cplusplus
2425#  if defined isnan || defined GNULIB_NAMESPACE
2426_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan)
2427#   undef isnan
2428#   if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__))
2429  /* This platform's <cmath> possibly defines isnan through a set of inline
2430     functions.  */
2431_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, rpl_isnan, bool)
2432#    define isnan rpl_isnan
2433#   else
2434_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, isnan, bool)
2435#   endif
2436#  endif
2437# else
2438/* Ensure isnan is a macro.  */
2439#  ifndef isnan
2440#   define isnan isnan
2441#  endif
2442# endif
2443#elif defined GNULIB_POSIXCHECK
2444# if defined isnan
2445_GL_WARN_REAL_FLOATING_DECL (isnan);
2446#  undef isnan
2447#  define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x)
2448# endif
2449#endif
2450
2451
2452#if @GNULIB_SIGNBIT@
2453# if (@REPLACE_SIGNBIT_USING_GCC@ \
2454      && (!defined __cplusplus || __cplusplus < 201103))
2455#  undef signbit
2456   /* GCC 4.0 and newer provides three built-ins for signbit.  */
2457#  define signbit(x) \
2458   (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
2459    sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
2460    __builtin_signbitf (x))
2461# endif
2462# if @REPLACE_SIGNBIT@ && !GNULIB_defined_signbit
2463#  undef signbit
2464_GL_EXTERN_C int gl_signbitf (float arg);
2465_GL_EXTERN_C int gl_signbitd (double arg);
2466_GL_EXTERN_C int gl_signbitl (long double arg);
2467#  if __GNUC__ >= 2 && !defined __STRICT_ANSI__
2468#   define _GL_NUM_UINT_WORDS(type) \
2469      ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
2470#   if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf
2471#    define gl_signbitf_OPTIMIZED_MACRO
2472#    define gl_signbitf(arg) \
2473       ({ union { float _value;                                         \
2474                  unsigned int _word[_GL_NUM_UINT_WORDS (float)];       \
2475                } _m;                                                   \
2476          _m._value = (arg);                                            \
2477          (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1;          \
2478        })
2479#   endif
2480#   if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd
2481#    define gl_signbitd_OPTIMIZED_MACRO
2482#    define gl_signbitd(arg) \
2483       ({ union { double _value;                                        \
2484                  unsigned int _word[_GL_NUM_UINT_WORDS (double)];      \
2485                } _m;                                                   \
2486          _m._value = (arg);                                            \
2487          (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1;          \
2488        })
2489#   endif
2490#   if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl
2491#    define gl_signbitl_OPTIMIZED_MACRO
2492#    define gl_signbitl(arg) \
2493       ({ union { long double _value;                                   \
2494                  unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \
2495                } _m;                                                   \
2496          _m._value = (arg);                                            \
2497          (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1;        \
2498        })
2499#   endif
2500#  endif
2501#  define signbit(x) \
2502   (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \
2503    sizeof (x) == sizeof (double) ? gl_signbitd (x) : \
2504    gl_signbitf (x))
2505#  define GNULIB_defined_signbit 1
2506# endif
2507# ifdef __cplusplus
2508#  if defined signbit || defined GNULIB_NAMESPACE
2509_GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit)
2510#   undef signbit
2511#   if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined _AIX))
2512  /* This platform's <cmath> possibly defines signbit through a set of inline
2513     functions.  */
2514_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, rpl_signbit, bool)
2515#    define signbit rpl_signbit
2516#   else
2517_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, signbit, bool)
2518#   endif
2519#  endif
2520# endif
2521#elif defined GNULIB_POSIXCHECK
2522# if defined signbit
2523_GL_WARN_REAL_FLOATING_DECL (signbit);
2524#  undef signbit
2525#  define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x)
2526# endif
2527#endif
2528
2529_GL_INLINE_HEADER_END
2530
2531#endif /* _@GUARD_PREFIX@_MATH_H */
2532#endif /* _@GUARD_PREFIX@_MATH_H */
2533