Imported Upstream version 1.4.13+git200906171200
This commit is contained in:
parent
4ab9f0d24c
commit
d0b8ab8112
362 changed files with 34110 additions and 10773 deletions
166
gl/math.in.h
166
gl/math.in.h
|
@ -1,6 +1,6 @@
|
|||
/* A GNU-like <math.h>.
|
||||
|
||||
Copyright (C) 2002-2003, 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2002-2003, 2007-2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -17,8 +17,12 @@
|
|||
|
||||
#ifndef _GL_MATH_H
|
||||
|
||||
#if __GNUC__ >= 3
|
||||
@PRAGMA_SYSTEM_HEADER@
|
||||
#endif
|
||||
|
||||
/* The include_next requires a split double-inclusion guard. */
|
||||
#@INCLUDE_NEXT@ @NEXT_MATH_H@
|
||||
#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_MATH_H@
|
||||
|
||||
#ifndef _GL_MATH_H
|
||||
#define _GL_MATH_H
|
||||
|
@ -32,6 +36,34 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
|
||||
/* POSIX allows platforms that don't support NAN. But all major
|
||||
machines in the past 15 years have supported something close to
|
||||
IEEE NaN, so we define this unconditionally. We also must define
|
||||
it on platforms like Solaris 10, where NAN is present but defined
|
||||
as a function pointer rather than a floating point constant. */
|
||||
#if !defined NAN || @REPLACE_NAN@
|
||||
# undef NAN
|
||||
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
|
||||
# ifdef __DECC
|
||||
static float
|
||||
_NaN ()
|
||||
{
|
||||
static float zero = 0.0f;
|
||||
return zero / zero;
|
||||
}
|
||||
# define NAN (_NaN())
|
||||
# else
|
||||
# define NAN (0.0f / 0.0f)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Solaris 10 defines HUGE_VAL, but as a function pointer rather
|
||||
than a floating point constant. */
|
||||
#if @REPLACE_HUGE_VAL@
|
||||
# undef HUGE_VAL
|
||||
# define HUGE_VAL (1.0 / 0.0)
|
||||
#endif
|
||||
|
||||
/* Write x as
|
||||
x = mantissa * 2^exp
|
||||
where
|
||||
|
@ -323,7 +355,8 @@ extern double trunc (double x);
|
|||
#endif
|
||||
|
||||
#if @GNULIB_TRUNCL@
|
||||
# if !@HAVE_DECL_TRUNCL@
|
||||
# if @REPLACE_TRUNCL@
|
||||
# undef truncl
|
||||
# define truncl rpl_truncl
|
||||
extern long double truncl (long double x);
|
||||
# endif
|
||||
|
@ -352,6 +385,124 @@ extern int gl_isfinitel (long double x);
|
|||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_ISINF@
|
||||
# if @REPLACE_ISINF@
|
||||
extern int gl_isinff (float x);
|
||||
extern int gl_isinfd (double x);
|
||||
extern int gl_isinfl (long double x);
|
||||
# undef isinf
|
||||
# define isinf(x) \
|
||||
(sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \
|
||||
sizeof (x) == sizeof (double) ? gl_isinfd (x) : \
|
||||
gl_isinff (x))
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
/* How to override a macro? */
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_ISNANF@
|
||||
/* Test for NaN for 'float' numbers. */
|
||||
# if @HAVE_ISNANF@
|
||||
/* The original <math.h> included above provides a declaration of isnan macro
|
||||
or (older) isnanf function. */
|
||||
# include <math.h>
|
||||
# if __GNUC__ >= 4
|
||||
/* GCC 4.0 and newer provides three built-ins for isnan. */
|
||||
# undef isnanf
|
||||
# define isnanf(x) __builtin_isnanf ((float)(x))
|
||||
# elif defined isnan
|
||||
# undef isnanf
|
||||
# define isnanf(x) isnan ((float)(x))
|
||||
# endif
|
||||
# else
|
||||
/* Test whether X is a NaN. */
|
||||
# undef isnanf
|
||||
# define isnanf rpl_isnanf
|
||||
extern int isnanf (float x);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if @GNULIB_ISNAND@
|
||||
/* Test for NaN for 'double' numbers.
|
||||
This function is a gnulib extension, unlike isnan() which applied only
|
||||
to 'double' numbers earlier but now is a type-generic macro. */
|
||||
# if @HAVE_ISNAND@
|
||||
/* The original <math.h> included above provides a declaration of isnan macro. */
|
||||
# include <math.h>
|
||||
# if __GNUC__ >= 4
|
||||
/* GCC 4.0 and newer provides three built-ins for isnan. */
|
||||
# undef isnand
|
||||
# define isnand(x) __builtin_isnan ((double)(x))
|
||||
# else
|
||||
# undef isnand
|
||||
# define isnand(x) isnan ((double)(x))
|
||||
# endif
|
||||
# else
|
||||
/* Test whether X is a NaN. */
|
||||
# undef isnand
|
||||
# define isnand rpl_isnand
|
||||
extern int isnand (double x);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if @GNULIB_ISNANL@
|
||||
/* Test for NaN for 'long double' numbers. */
|
||||
# if @HAVE_ISNANL@
|
||||
/* The original <math.h> included above provides a declaration of isnan macro or (older) isnanl function. */
|
||||
# include <math.h>
|
||||
# if __GNUC__ >= 4
|
||||
/* GCC 4.0 and newer provides three built-ins for isnan. */
|
||||
# undef isnanl
|
||||
# define isnanl(x) __builtin_isnanl ((long double)(x))
|
||||
# elif defined isnan
|
||||
# undef isnanl
|
||||
# define isnanl(x) isnan ((long double)(x))
|
||||
# endif
|
||||
# else
|
||||
/* Test whether X is a NaN. */
|
||||
# undef isnanl
|
||||
# define isnanl rpl_isnanl
|
||||
extern int isnanl (long double x);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL! */
|
||||
#if @GNULIB_ISNAN@
|
||||
# if @REPLACE_ISNAN@
|
||||
/* We can't just use the isnanf macro (e.g.) as exposed by
|
||||
isnanf.h (e.g.) here, because those may end up being macros
|
||||
that recursively expand back to isnan. So use the gnulib
|
||||
replacements for them directly. */
|
||||
# if @HAVE_ISNANF@ && __GNUC__ >= 4
|
||||
# define gl_isnan_f(x) __builtin_isnan ((float)(x))
|
||||
# else
|
||||
extern int rpl_isnanf (float x);
|
||||
# define gl_isnan_f(x) rpl_isnanf (x)
|
||||
# endif
|
||||
# if @HAVE_ISNAND@ && __GNUC__ >= 4
|
||||
# define gl_isnan_d(x) __builtin_isnan ((double)(x))
|
||||
# else
|
||||
extern int rpl_isnand (double x);
|
||||
# define gl_isnan_d(x) rpl_isnand (x)
|
||||
# endif
|
||||
# if @HAVE_ISNANL@ && __GNUC__ >= 4
|
||||
# define gl_isnan_l(x) __builtin_isnan ((long double)(x))
|
||||
# else
|
||||
extern int rpl_isnanl (long double x);
|
||||
# define gl_isnan_l(x) rpl_isnanl (x)
|
||||
# endif
|
||||
# undef isnan
|
||||
# define isnan(x) \
|
||||
(sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \
|
||||
sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \
|
||||
gl_isnan_f (x))
|
||||
# endif
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
/* How to override a macro? */
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_SIGNBIT@
|
||||
# if @REPLACE_SIGNBIT_USING_GCC@
|
||||
# undef signbit
|
||||
|
@ -367,7 +518,8 @@ extern int gl_signbitf (float arg);
|
|||
extern int gl_signbitd (double arg);
|
||||
extern int gl_signbitl (long double arg);
|
||||
# if __GNUC__ >= 2 && !__STRICT_ANSI__
|
||||
# if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT
|
||||
# if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf
|
||||
# define gl_signbitf_OPTIMIZED_MACRO
|
||||
# define gl_signbitf(arg) \
|
||||
({ union { float _value; \
|
||||
unsigned int _word[(sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \
|
||||
|
@ -376,7 +528,8 @@ extern int gl_signbitl (long double arg);
|
|||
(_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \
|
||||
})
|
||||
# endif
|
||||
# if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT
|
||||
# if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd
|
||||
# define gl_signbitd_OPTIMIZED_MACRO
|
||||
# define gl_signbitd(arg) \
|
||||
({ union { double _value; \
|
||||
unsigned int _word[(sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \
|
||||
|
@ -385,7 +538,8 @@ extern int gl_signbitl (long double arg);
|
|||
(_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \
|
||||
})
|
||||
# endif
|
||||
# if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT
|
||||
# if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl
|
||||
# define gl_signbitl_OPTIMIZED_MACRO
|
||||
# define gl_signbitl(arg) \
|
||||
({ union { long double _value; \
|
||||
unsigned int _word[(sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue