diff options
Diffstat (limited to 'libm/include/math.h')
-rw-r--r-- | libm/include/math.h | 170 |
1 files changed, 77 insertions, 93 deletions
diff --git a/libm/include/math.h b/libm/include/math.h index a86a16fb6..b13eca949 100644 --- a/libm/include/math.h +++ b/libm/include/math.h @@ -11,18 +11,16 @@ /* * from: @(#)fdlibm.h 5.1 93/09/24 - * $FreeBSD: src/lib/msun/src/math.h,v 1.61 2005/04/16 21:12:47 das Exp $ + * $FreeBSD$ */ #ifndef _MATH_H_ #define _MATH_H_ #include <sys/cdefs.h> -#include <sys/types.h> +#include <sys/_types.h> #include <limits.h> -#define __pure2 - /* * ANSI/POSIX */ @@ -36,37 +34,29 @@ extern const union __nan_un { float __uf; } __nan; -/* #if __GNUC_PREREQ__(3, 3) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800) */ -#if 1 +#if __GNUC_PREREQ__(3, 3) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800) #define __MATH_BUILTIN_CONSTANTS #endif -/* #if __GNUC_PREREQ__(3, 0) && !defined(__INTEL_COMPILER) */ -#if 1 +#if __GNUC_PREREQ__(3, 0) && !defined(__INTEL_COMPILER) #define __MATH_BUILTIN_RELOPS #endif -/* #ifdef __MATH_BUILTIN_CONSTANTS */ -#if 1 +#ifdef __MATH_BUILTIN_CONSTANTS #define HUGE_VAL __builtin_huge_val() #else #define HUGE_VAL (__infinity.__ud) #endif -/* #if __ISO_C_VISIBLE >= 1999 */ -#if 0 -#define FP_ILOGB0 (-__INT_MAX) -#define FP_ILOGBNAN __INT_MAX -#else -#define FP_ILOGB0 (-INT_MAX) -#define FP_ILOGBNAN INT_MAX -#endif +#if __ISO_C_VISIBLE >= 1999 +#define FP_ILOGB0 (-INT_MAX) /* Android-changed */ +#define FP_ILOGBNAN INT_MAX /* Android-changed */ #ifdef __MATH_BUILTIN_CONSTANTS #define HUGE_VALF __builtin_huge_valf() #define HUGE_VALL __builtin_huge_vall() -#define INFINITY __builtin_inf() -#define NAN __builtin_nan("") +#define INFINITY __builtin_inff() +#define NAN __builtin_nanf("") #else #define HUGE_VALF (float)HUGE_VAL #define HUGE_VALL (long double)HUGE_VAL @@ -78,14 +68,11 @@ extern const union __nan_un { #define MATH_ERREXCEPT 2 #define math_errhandling MATH_ERREXCEPT -/* XXX We need a <machine/math.h>. */ -#if defined(__ia64__) || defined(__sparc64__) -#define FP_FAST_FMA -#endif +#define FP_FAST_FMAF 1 #ifdef __ia64__ -#define FP_FAST_FMAL +#define FP_FAST_FMA 1 +#define FP_FAST_FMAL 1 #endif -#define FP_FAST_FMAF /* Symbolic constants to classify floating point numbers. */ #define FP_INFINITE 0x01 @@ -104,10 +91,10 @@ extern const union __nan_un { : __isfinitel(x)) #define isinf(x) \ ((sizeof (x) == sizeof (float)) ? __isinff(x) \ - : (sizeof (x) == sizeof (double)) ? __isinf(x) \ + : (sizeof (x) == sizeof (double)) ? isinf(x) \ : __isinfl(x)) #define isnan(x) \ - ((sizeof (x) == sizeof (float)) ? isnanf(x) \ + ((sizeof (x) == sizeof (float)) ? __isnanf(x) \ : (sizeof (x) == sizeof (double)) ? isnan(x) \ : __isnanl(x)) #define isnormal(x) \ @@ -137,16 +124,14 @@ extern const union __nan_un { : (sizeof (x) == sizeof (double)) ? __signbit(x) \ : __signbitl(x)) -#if 0 typedef __double_t double_t; typedef __float_t float_t; -#endif -/* #endif */ /* __ISO_C_VISIBLE >= 1999 */ +#endif /* __ISO_C_VISIBLE >= 1999 */ /* * XOPEN/SVID */ -/* #if __BSD_VISIBLE || __XSI_VISIBLE */ +#if __BSD_VISIBLE || __XSI_VISIBLE #define M_E 2.7182818284590452354 /* e */ #define M_LOG2E 1.4426950408889634074 /* log 2e */ #define M_LOG10E 0.43429448190325182765 /* log 10e */ @@ -163,7 +148,7 @@ typedef __float_t float_t; #define MAXFLOAT ((float)3.40282346638528860e+38) extern int signgam; -/* #endif */ /* __BSD_VISIBLE || __XSI_VISIBLE */ +#endif /* __BSD_VISIBLE || __XSI_VISIBLE */ #if __BSD_VISIBLE #if 0 @@ -190,8 +175,8 @@ int __isfinitef(float) __pure2; int __isfinite(double) __pure2; int __isfinitel(long double) __pure2; int __isinff(float) __pure2; -int __isinf(double) __pure2; int __isinfl(long double) __pure2; +int __isnanf(float) __pure2; int __isnanl(long double) __pure2; int __isnormalf(float) __pure2; int __isnormal(double) __pure2; @@ -230,7 +215,7 @@ double fmod(double, double); /* * These functions are not in C90. */ -/* #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */ +#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE double acosh(double); double asinh(double); double atanh(double); @@ -242,12 +227,13 @@ double expm1(double); double fma(double, double, double); double hypot(double, double); int ilogb(double) __pure2; -/* int (isinf)(double) __pure2; */ +int (isinf)(double) __pure2; int (isnan)(double) __pure2; double lgamma(double); long long llrint(double); long long llround(double); double log1p(double); +double log2(double); double logb(double); long lrint(double); long lround(double); @@ -256,23 +242,26 @@ double nextafter(double, double); double remainder(double, double); double remquo(double, double, int *); double rint(double); -/* #endif */ /* __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */ +#endif /* __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */ -/* #if __BSD_VISIBLE || __XSI_VISIBLE */ +#if __BSD_VISIBLE || __XSI_VISIBLE double j0(double); double j1(double); double jn(int, double); -double scalb(double, double); double y0(double); double y1(double); double yn(int, double); -/* #if __XSI_VISIBLE <= 500 || __BSD_VISIBLE */ +#if __XSI_VISIBLE <= 500 || __BSD_VISIBLE double gamma(double); -/* #endif */ -/* #endif */ /* __BSD_VISIBLE || __XSI_VISIBLE */ +#endif + +#if __XSI_VISIBLE <= 600 || __BSD_VISIBLE +double scalb(double, double); +#endif +#endif /* __BSD_VISIBLE || __XSI_VISIBLE */ -/* #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 */ +#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 double copysign(double, double) __pure2; double fdim(double, double); double fmax(double, double) __pure2; @@ -283,12 +272,12 @@ double scalbln(double, long); double scalbn(double, int); double tgamma(double); double trunc(double); -/* #endif */ +#endif /* * BSD math library entry points */ -/* #if __BSD_VISIBLE */ +#if __BSD_VISIBLE double drem(double, double); int finite(double) __pure2; int isnanf(float) __pure2; @@ -304,10 +293,10 @@ double lgamma_r(double, int *); * IEEE Test Vector */ double significand(double); -/* #endif */ /* __BSD_VISIBLE */ +#endif /* __BSD_VISIBLE */ /* float versions of ANSI/POSIX functions */ -/*#if __ISO_C_VISIBLE >= 1999 */ +#if __ISO_C_VISIBLE >= 1999 float acosf(float); float asinf(float); float atanf(float); @@ -328,6 +317,7 @@ int ilogbf(float) __pure2; float ldexpf(float, int); float log10f(float); float log1pf(float); +float log2f(float); float logf(float); float modff(float, float *); /* fundamentally !__pure2 */ @@ -370,12 +360,12 @@ float fdimf(float, float); float fmaf(float, float, float); float fmaxf(float, float) __pure2; float fminf(float, float) __pure2; -/* #endif */ +#endif /* * float versions of BSD math library entry points */ -/* #if __BSD_VISIBLE */ +#if __BSD_VISIBLE float dremf(float, float); int finitef(float) __pure2; float gammaf(float); @@ -399,98 +389,92 @@ float lgammaf_r(float, int *); * float version of IEEE Test Vector */ float significandf(float); -/* #endif */ /* __BSD_VISIBLE */ +#endif /* __BSD_VISIBLE */ /* * long double versions of ISO/POSIX math functions */ -/* #if __ISO_C_VISIBLE >= 1999 */ -#if 0 -long double acoshl(long double); +#if __ISO_C_VISIBLE >= 1999 long double acosl(long double); -long double asinhl(long double); long double asinl(long double); long double atan2l(long double, long double); -long double atanhl(long double); long double atanl(long double); long double cbrtl(long double); -#endif long double ceill(long double); long double copysignl(long double, long double) __pure2; -#if 0 -long double coshl(long double); long double cosl(long double); -long double erfcl(long double); -long double erfl(long double); long double exp2l(long double); long double expl(long double); -long double expm1l(long double); -#endif long double fabsl(long double) __pure2; long double fdiml(long double, long double); long double floorl(long double); long double fmal(long double, long double, long double); long double fmaxl(long double, long double) __pure2; long double fminl(long double, long double) __pure2; -#if 0 long double fmodl(long double, long double); -#endif long double frexpl(long double value, int *); /* fundamentally !__pure2 */ -#if 0 long double hypotl(long double, long double); -#endif int ilogbl(long double) __pure2; long double ldexpl(long double, int); -#if 0 -long double lgammal(long double); long long llrintl(long double); -#endif long long llroundl(long double); -#if 0 -long double log10l(long double); -long double log1pl(long double); -long double log2l(long double); long double logbl(long double); -long double logl(long double); long lrintl(long double); -#endif long lroundl(long double); -#if 0 long double modfl(long double, long double *); /* fundamentally !__pure2 */ long double nanl(const char *) __pure2; long double nearbyintl(long double); -#endif long double nextafterl(long double, long double); double nexttoward(double, long double); float nexttowardf(float, long double); long double nexttowardl(long double, long double); -#if 0 -long double powl(long double, long double); long double remainderl(long double, long double); long double remquol(long double, long double, int *); long double rintl(long double); -#endif long double roundl(long double); long double scalblnl(long double, long); long double scalbnl(long double, int); -#if 0 -long double sinhl(long double); long double sinl(long double); long double sqrtl(long double); -long double tanhl(long double); long double tanl(long double); -long double tgammal(long double); -#endif long double truncl(long double); -/* BIONIC: GLibc compatibility - required by the ARM toolchain */ -#ifdef _GNU_SOURCE -void sincos(double x, double *sin, double *cos); -void sincosf(float x, float *sin, float *cos); -void sincosl(long double x, long double *sin, long double *cos); -#endif - -/* #endif */ /* __ISO_C_VISIBLE >= 1999 */ +#endif /* __ISO_C_VISIBLE >= 1999 */ __END_DECLS #endif /* !_MATH_H_ */ + +/* separate header for cmath */ +#ifndef _MATH_EXTRA_H_ +#if __ISO_C_VISIBLE >= 1999 +#if _DECLARE_C99_LDBL_MATH + +#define _MATH_EXTRA_H_ + +/* + * extra long double versions of math functions for C99 and cmath + */ +__BEGIN_DECLS + +long double acoshl(long double); +long double asinhl(long double); +long double atanhl(long double); +long double coshl(long double); +long double erfcl(long double); +long double erfl(long double); +long double expm1l(long double); +long double lgammal(long double); +long double log10l(long double); +long double log1pl(long double); +long double log2l(long double); +long double logl(long double); +long double powl(long double, long double); +long double sinhl(long double); +long double tanhl(long double); +long double tgammal(long double); + +__END_DECLS + +#endif /* !_DECLARE_C99_LDBL_MATH */ +#endif /* __ISO_C_VISIBLE >= 1999 */ +#endif /* !_MATH_EXTRA_H_ */ |