Update or add comments to files and functions for use by Doxygen.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12139 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
darylm503
2011-08-15 19:05:36 +00:00
parent abb4e5f346
commit a430bdb132
11 changed files with 1745 additions and 713 deletions

View File

@ -1,6 +1,15 @@
/* $NetBSD: math.h,v 1.44 2006/03/25 16:41:11 xtraeme Exp $ */
/** @file
Floating-point Math functions and macros.
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
/*
* ====================================================
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
*
@ -9,18 +18,20 @@
* software is freely granted, provided that this notice
* is preserved.
* ====================================================
*/
/*
* @(#)fdlibm.h 5.1 93/09/24
*/
NetBSD: math.h,v 1.44 2006/03/25 16:41:11 xtraeme Exp
dlibm.h 5.1 93/09/24
**/
#ifndef _MATH_H_
#define _MATH_H_
#include <sys/EfiCdefs.h>
#include <sys/featuretest.h>
#include <sys/featuretest.h>
/** @{
@brief These are forward references to unions and macros used internaly
by the implementation of the math functions and macros.
**/
union __float_u {
unsigned char __dummy[sizeof(float)];
float __val;
@ -36,8 +47,7 @@ union __long_double_u {
long double __val;
};
#include <machine/math.h> /* may use __float_u, __double_u,
or __long_double_u */
#include <machine/math.h> /* may use __float_u, __double_u, or __long_double_u */
#ifdef __HAVE_LONG_DOUBLE
#define __fpmacro_unary_floating(__name, __arg0) \
@ -55,64 +65,290 @@ union __long_double_u {
: __ ## __name ## d (__arg0))
#endif /* __HAVE_LONG_DOUBLE */
extern const union __double_u __infinity;
extern const union __float_u __infinityf;
extern const union __long_double_u __infinityl;
/* C99 7.12.3.1 int fpclassify(real-floating x) */
#define fpclassify(__x) __fpmacro_unary_floating(fpclassify, __x)
/* C99 7.12.3.3 int isinf(real-floating x) */
#ifdef __isinf
#define isinf(__x) __isinf(__x)
#else
#define isinf(__x) __fpmacro_unary_floating(isinf, __x)
#endif
/* C99 7.12.3.4 int isnan(real-floating x) */
#ifdef __isnan
#define isnan(__x) __isnan(__x)
#else
#define isnan(__x) __fpmacro_unary_floating(isnan, __x)
#endif
/*@)*/
/*#############################################################
* ISO C95
*/
/**@{
Double, float, and long double versions, respectively, of HUGE_VAL.
*/
#define HUGE_VAL __infinity.__val
#define HUGE_VALF __infinityf.__val
#define HUGE_VALL __infinityl.__val
/*@)*/
__BEGIN_DECLS
/*
* ANSI/POSIX
*/
/* 7.12#3 HUGE_VAL, HUGELF, HUGE_VALL */
extern const union __double_u __infinity;
#define HUGE_VAL __infinity.__val
/** Compute the principal value of the arc cosine of Arg.
@param[in] Arg The value to compute the arc cosine of.
@return The computed value of the arc cosine of Arg in the interval [0,pi] radians.
If Arg is not in the interval [-1,+1], errno is set to EDOM.
**/
double acos(double Arg);
/** Compute the principal value of the arc sine of Arg.
@param[in] Arg The value to compute the arc sine of.
@return The computed value of the arc sine of Arg in the interval [-pi/2,+pi/2] radians.
If Arg is not in the interval [-1,+1], errno is set to EDOM.
**/
double asin(double Arg);
/** Compute the principal value of the arc tangent of Arg.
@param[in] Arg The value to compute the arc tangent of.
@return The computed value of the arc tangent of Arg in the interval [-pi/2,+pi/2] radians.
**/
double atan(double Arg);
/** Compute the value of the arc tangent of (Num / Denom).
The sign of both arguments is used to determine the quadrant of the return value.
@param[in] Num The numerator of the value to compute the arc tangent of.
@param[in] Denom The denominator of the value to compute the arc tangent of.
@return The computed value of the arc tangent of (Num / Denom) in the interval [-pi,+pi] radians.
**/
double atan2(double Num, double Denom);
/** Compute the value of the cosine of Arg, measured in radians.
@param[in] Arg The value to compute the cosine of.
@return The computed value of the cosine of Arg.
**/
double cos(double Arg);
/** Compute the value of the sine of Arg.
@param[in] Arg The value to compute the sine of.
@return The computed value of the sine of Arg.
**/
double sin(double Arg);
/** Compute the value of the tangent of Arg.
@param[in] Arg The value to compute the tangent of.
@return The computed value of the tangent of Arg.
**/
double tan(double Arg);
/** Compute the value of the hyperbolic cosine of Arg.
@param[in] Arg The value to compute the hyperbolic cosine of.
@return The computed value of the hyperbolic cosine of Arg.
If the magnitude of Arg is too large, errno is set to ERANGE.
**/
double cosh(double Arg);
/** Compute the value of the hyperbolic sine of Arg.
@param[in] Arg The value to compute the hyperbolic sine of.
@return The computed value of the hyperbolic sine of Arg.
If the magnitude of Arg is too large, errno is set to ERANGE.
**/
double sinh(double Arg);
/** Compute the value of the hyperbolic tangent of Arg.
@param[in] Arg The value to compute the hyperbolic tangent of.
@return The computed value of the hyperbolic tangent of Arg.
**/
double tanh(double Arg);
/** Compute the base-e exponential of Arg.
@param[in] Arg The value to compute the base-e exponential of.
@return The computed value of e**Arg.
If the magnitude of Arg is too large, errno is set to ERANGE.
**/
double exp(double Arg);
/** Break a floating-point number into a normalized fraction and an integral power of 2.
@param[in] Value The floating-point value to be broken down.
@param[out] Exp A pointer to an integer object to receive the integral power of 2 exponent.
@return The frexp function returns a value R, such that Value == R**Exp.
If Value is zero, both parts of the result are zero.
**/
double frexp(double Value, int *Exp);
/** Multiply a floating-point number, Value, by an integral power of 2, Exp.
@param[in] Value The floating-point value to be multiplied.
@param[out] Exp The integral power of 2 to multiply Value by.
@return The ldexp function returns a value R, such that R = Value x 2**Exp.
If a range error occurs, errno will be set to ERANGE.
**/
double ldexp(double Value, int Exp);
/** Compute the natural logarithm of Arg.
@param[in] Arg The value to compute the natural logarithm of.
@return The log function returns log base-e of Arg. If Arg is negative, errno is set to EDOM.
Otherwise, errno will be set to ERANGE if a range error occurs.
**/
double log(double Arg);
/** Compute the common (base-10) logarithm of Arg.
@param[in] Arg The value to compute the common logarithm of.
@return The log10 function returns log base-10 of Arg. If Arg is negative, errno is set to EDOM.
Otherwise, errno will be set to ERANGE if Arg is 0.
**/
double log10(double Arg);
/** Compute the base-2 logarithm of Arg.
@param[in] Arg The value to compute the base-2 logarithm of.
@return The log function returns log base-2 of Arg. If Arg is negative, errno is set to EDOM.
Otherwise, errno will be set to ERANGE if Arg is 0.
**/
double log2(double Arg);
/** Break Value into integral and fractional parts, each of which has the same type and sign
as Value. Store the integral part in the object pointed to by Integ and return the
fractional part.
@param[in] Value The value to compute the arc cosine of.
@param[out] Integ Pointer to where the integral component is to be stored.
@return The fractional part of Value is returned directly while the integral part is
returned in the location pointed to by Integ.
**/
double modf(double Value, double *Integ);
/** Compute Value raised to the power Exp.
@param[in] Value The value to be raised.
@param[in] Exp The power Value is to be raised to.
@return The pow function returns Value**Exp. If an error occurs, errno will be set as follows:
- EDOM: Value is finite and negative and Exp is finite and not an integer.
- EDOM: Both Value and Exp are zero.
- EDOM: Value is zero and Exp is less than zero.
**/
double pow(double Value, double Exp);
/** Compute the non-negative square root of Arg.
@param[in] Arg The value to compute the square root of.
@return The square root of Arg. If Arg is less than zero, errno is set to EDOM.
**/
double sqrt(double Arg);
/** Compute the smallest integer value not less than Arg.
@param[in] Arg The value to compute the ceiling of.
@return The ceiling of Arg expressed as a floating-point number.
**/
double ceil(double Arg);
/** Compute the absolute value of Arg.
@param[in] Arg The value to compute the absolute value of.
@return The absolute value of Arg.
**/
double fabs(double Arg);
/** Compute the largest integer value not greater than Arg.
@param[in] Arg The value to compute the floor of.
@return The largest integer value not greater than Arg, expressed as a floating-point number.
**/
double floor(double);
/** Compute the floating-point remainder of A1 / A2.
@param[in] A1 The dividend.
@param[in] A2 The divisor.
@return The remainder of A1 / A2 with the same sign as A1. If A2 is zero, the fmod function
returns 0.
**/
double fmod(double A1, double A2);
int finite(double);
double expm1(double);
/**@{
C99, Posix, or NetBSD functions that are not part of the C95 specification.
**/
/*
* Functions callable from C, intended to support IEEE arithmetic.
*/
double copysign(double, double);
double scalbn(double, int);
/*
* ISO C99
* Library implementation
*/
/* 7.12#3 HUGE_VAL, HUGELF, HUGE_VALL */
extern const union __float_u __infinityf;
#define HUGE_VALF __infinityf.__val
int __fpclassifyf(float);
int __fpclassifyd(double);
int __isinff(float);
int __isinfd(double);
int __isnanf(float);
int __isnand(double);
extern const union __long_double_u __infinityl;
#define HUGE_VALL __infinityl.__val
#ifdef __HAVE_LONG_DOUBLE
int __fpclassifyl(long double);
int __isinfl(long double);
int __isnanl(long double);
#endif /* __HAVE_LONG_DOUBLE */
/*@}*/
/* 7.12#4 INFINITY */
#ifdef __INFINITY
#define INFINITY __INFINITY /* float constant which overflows */
#else
#define INFINITY HUGE_VALF /* positive infinity */
#endif /* __INFINITY */
__END_DECLS
/* 7.12#5 NAN: a quiet NaN, if supported */
#ifdef __HAVE_NANF
extern const union __float_u __nanf;
#define NAN __nanf.__val
#endif /* __HAVE_NANF */
/* 7.12#6 number classification macros */
#define FP_INFINITE 0x00
#define FP_NAN 0x01
#define FP_NORMAL 0x02
#define FP_SUBNORMAL 0x03
#define FP_ZERO 0x04
/* NetBSD extensions */
#define _FP_LOMD 0x80 /* range for machine-specific classes */
#define _FP_HIMD 0xff
/*
* XOPEN/SVID
*/
#define M_E 2.7182818284590452354 /* e */
#define M_LOG2E 1.4426950408889634074 /* log 2e */
#define M_LOG10E 0.43429448190325182765 /* log 10e */
#define M_LN2 0.69314718055994530942 /* log e2 */
#define M_LN10 2.30258509299404568402 /* log e10 */
#define M_PI 3.14159265358979323846 /* pi */
#define M_PI_2 1.57079632679489661923 /* pi/2 */
#define M_PI_4 0.78539816339744830962 /* pi/4 */
#define M_1_PI 0.31830988618379067154 /* 1/pi */
#define M_2_PI 0.63661977236758134308 /* 2/pi */
#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */
#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
#define MAXFLOAT ((float)3.40282346638528860e+38)
/**@{
Extensions provided by NetBSD but not required by the C95 standard.
**/
extern int signgam;
enum fdversion {fdlibm_ieee = -1, fdlibm_svid, fdlibm_xopen, fdlibm_posix};
@ -120,7 +356,7 @@ enum fdversion {fdlibm_ieee = -1, fdlibm_svid, fdlibm_xopen, fdlibm_posix};
#define _LIB_VERSION_TYPE enum fdversion
#define _LIB_VERSION _fdlib_version
/* if global variable _LIB_VERSION is not desirable, one may
/** If global variable _LIB_VERSION is not desirable, one may
* change the following to be a constant by:
* #define _LIB_VERSION_TYPE const enum version
* In that case, after one initializes the value _LIB_VERSION (see
@ -146,11 +382,7 @@ struct exception {
#define HUGE MAXFLOAT
/*
* set X_TLOSS = pi*2**52, which is possibly defined in <values.h>
* (one may replace the following line by "#include <values.h>")
*/
/** set X_TLOSS = pi*2**52 **/
#define X_TLOSS 1.41484755040568800000e+16
#define DOMAIN 1
@ -159,295 +391,52 @@ struct exception {
#define UNDERFLOW 4
#define TLOSS 5
#define PLOSS 6
/*@}*/
__BEGIN_DECLS
/*
* ANSI/POSIX
*/
double acos(double);
double asin(double);
double atan(double);
double atan2(double, double);
double cos(double);
double sin(double);
double tan(double);
double cosh(double);
double sinh(double);
double tanh(double);
double exp(double);
double frexp(double, int *);
double ldexp(double, int);
double log(double);
double log2(double);
double log10(double);
double modf(double, double *);
double pow(double, double);
double sqrt(double);
double ceil(double);
double fabs(double);
double floor(double);
double fmod(double, double);
//#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
//double erf(double);
//double erfc(double);
//double gamma(double);
//double hypot(double, double);
int finite(double);
//double j0(double);
//double j1(double);
//double jn(int, double);
//double lgamma(double);
//double y0(double);
//double y1(double);
//double yn(int, double);
//#if (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
//double acosh(double);
//double asinh(double);
//double atanh(double);
//double cbrt(double);
double expm1(double);
//int ilogb(double);
//double log1p(double);
//double logb(double);
//double nextafter(double, double);
//double remainder(double, double);
//double rint(double);
//double scalb(double, double);
//#endif /* (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)*/
//#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
/* 7.12.3.1 int fpclassify(real-floating x) */
#define fpclassify(__x) __fpmacro_unary_floating(fpclassify, __x)
#if 0
/*
* ISO C99
*/
#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \
!defined(_XOPEN_SOURCE) || \
((__STDC_VERSION__ - 0) >= 199901L) || \
((_POSIX_C_SOURCE - 0) >= 200112L) || \
((_XOPEN_SOURCE - 0) >= 600) || \
defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE)
/* 7.12.3.2 int isfinite(real-floating x) */
#define isfinite(__x) __fpmacro_unary_floating(isfinite, __x)
/* 7.12.3.5 int isnormal(real-floating x) */
#define isnormal(__x) (fpclassify(__x) == FP_NORMAL)
/* 7.12.3.6 int signbit(real-floating x) */
#define signbit(__x) __fpmacro_unary_floating(signbit, __x)
/* 7.12.4 trigonometric */
float acosf(float);
float asinf(float);
float atanf(float);
float atan2f(float, float);
float cosf(float);
float sinf(float);
float tanf(float);
/* 7.12.5 hyperbolic */
float acoshf(float);
float asinhf(float);
float atanhf(float);
float coshf(float);
float sinhf(float);
float tanhf(float);
/* 7.12.6 exp / log */
float expf(float);
float expm1f(float);
float frexpf(float, int *);
int ilogbf(float);
float ldexpf(float, int);
float logf(float);
float log2f(float);
float log10f(float);
float log1pf(float);
float logbf(float);
float modff(float, float *);
float scalbnf(float, int);
/* 7.12.7 power / absolute */
float cbrtf(float);
float fabsf(float);
float hypotf(float, float);
float powf(float, float);
float sqrtf(float);
/* 7.12.8 error / gamma */
float erff(float);
float erfcf(float);
float lgammaf(float);
/* 7.12.9 nearest integer */
float ceilf(float);
float floorf(float);
float rintf(float);
double round(double);
float roundf(float);
double trunc(double);
float truncf(float);
long int lrint(double);
long int lrintf(float);
/* LONGLONG */
long long int llrint(double);
/* LONGLONG */
long long int llrintf(float);
long int lround(double);
long int lroundf(float);
/* LONGLONG */
long long int llround(double);
/* LONGLONG */
long long int llroundf(float);
/* 7.12.10 remainder */
float fmodf(float, float);
float remainderf(float, float);
/* 7.2.11 manipulation */
float copysignf(float, float);
double nan(const char *);
float nanf(const char *);
long double nanl(const char *);
float nextafterf(float, float);
#endif /* !_ANSI_SOURCE && ... */
#if defined(_NETBSD_SOURCE)
#ifndef __cplusplus
int matherr(struct exception *);
#endif
#endif /* _NETBSD_SOURCE */
/*
* IEEE Test Vector
*/
double significand(double);
#endif /* if 0 */
/* 7.12.3.3 int isinf(real-floating x) */
#ifdef __isinf
#define isinf(__x) __isinf(__x)
/* 7.12#4 INFINITY */
#ifdef __INFINITY
#define INFINITY __INFINITY /**< float constant which overflows */
#else
#define isinf(__x) __fpmacro_unary_floating(isinf, __x)
#endif
#define INFINITY HUGE_VALF /**< positive infinity */
#endif /* __INFINITY */
/* 7.12.3.4 int isnan(real-floating x) */
#ifdef __isnan
#define isnan(__x) __isnan(__x)
#else
#define isnan(__x) __fpmacro_unary_floating(isnan, __x)
#endif
/* 7.12#5 NAN: a quiet NaN, if supported */
#ifdef __HAVE_NANF
extern const union __float_u __nanf;
#define NAN __nanf.__val
#endif /* __HAVE_NANF */
/*
* Functions callable from C, intended to support IEEE arithmetic.
/**@{
C99 7.12#6 Number classification macros represent mutually exclusive kinds of floating-point
values.
**/
#define FP_INFINITE 0x00
#define FP_NAN 0x01
#define FP_NORMAL 0x02
#define FP_SUBNORMAL 0x03
#define FP_ZERO 0x04
/* NetBSD extensions */
#define _FP_LOMD 0x80 /**< range for machine-specific classes */
#define _FP_HIMD 0xff
/*@)*/
/**@{
* Constants ala XOPEN/SVID.
*/
double copysign(double, double);
double scalbn(double, int);
#if 0
/*
* BSD math library entry points
*/
#ifndef __MATH_PRIVATE__
double cabs(/* struct complex { double r; double i; } */);
#endif
double drem(double, double);
#if defined(_NETBSD_SOURCE) || defined(_REENTRANT)
/*
* Reentrant version of gamma & lgamma; passes signgam back by reference
* as the second argument; user must allocate space for signgam.
*/
double gamma_r(double, int *);
double lgamma_r(double, int *);
#endif /* _NETBSD_SOURCE || _REENTRANT */
#if defined(_NETBSD_SOURCE)
/* float versions of ANSI/POSIX functions */
float gammaf(float);
int isinff(float);
int isnanf(float);
int finitef(float);
float j0f(float);
float j1f(float);
float jnf(int, float);
float y0f(float);
float y1f(float);
float ynf(int, float);
float scalbf(float, float);
/*
* float version of IEEE Test Vector
*/
float significandf(float);
/*
* float versions of BSD math library entry points
*/
#ifndef __MATH_PRIVATE__
float cabsf(/* struct complex { float r; float i; } */);
#endif
float dremf(float, float);
#endif /* _NETBSD_SOURCE */
#if defined(_NETBSD_SOURCE) || defined(_REENTRANT)
/*
* Float versions of reentrant version of gamma & lgamma; passes
* signgam back by reference as the second argument; user must
* allocate space for signgam.
*/
float gammaf_r(float, int *);
float lgammaf_r(float, int *);
#endif /* !... || _REENTRANT */
#endif /* if 0 */
///*
// * Library implementation
// */
int __fpclassifyf(float);
int __fpclassifyd(double);
//int __isfinitef(float);
//int __isfinited(double);
int __isinff(float);
int __isinfd(double);
int __isnanf(float);
int __isnand(double);
//int __signbitf(float);
//int __signbitd(double);
//#ifdef __HAVE_LONG_DOUBLE
int __fpclassifyl(long double);
//int __isfinitel(long double);
int __isinfl(long double);
int __isnanl(long double);
//int __signbitl(long double);
//#endif
__END_DECLS
#define M_E 2.7182818284590452354 /**< e */
#define M_LOG2E 1.4426950408889634074 /**< log 2e */
#define M_LOG10E 0.43429448190325182765 /**< log 10e */
#define M_LN2 0.69314718055994530942 /**< log e2 */
#define M_LN10 2.30258509299404568402 /**< log e10 */
#define M_PI 3.14159265358979323846 /**< pi */
#define M_PI_2 1.57079632679489661923 /**< pi/2 */
#define M_PI_4 0.78539816339744830962 /**< pi/4 */
#define M_1_PI 0.31830988618379067154 /**< 1/pi */
#define M_2_PI 0.63661977236758134308 /**< 2/pi */
#define M_2_SQRTPI 1.12837916709551257390 /**< 2/sqrt(pi) */
#define M_SQRT2 1.41421356237309504880 /**< sqrt(2) */
#define M_SQRT1_2 0.70710678118654752440 /**< 1/sqrt(2) */
#define MAXFLOAT ((float)3.40282346638528860e+38)
/*@}*/
#endif /* _MATH_H_ */