X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=includes%2Fmath.h;h=ef80c92775d192540504a4ab664b2b5d9ee756f8;hb=e081ed1387e0c27dc689c8e32fdda06039544107;hp=f737c215d8975285bd19e76d6c062981f613fe86;hpb=ad2651a3d8a2e2ae70a5ad882518ef346ab1bc7b;p=pdclib diff --git a/includes/math.h b/includes/math.h index f737c21..ef80c92 100644 --- a/includes/math.h +++ b/includes/math.h @@ -4,354 +4,83 @@ // Public Domain C Library - http://pdclib.sourceforge.net // This code is Public Domain. Use, modify, and redistribute at will. // ---------------------------------------------------------------------------- -// Provides floating point math functions. +// Mathematics // ---------------------------------------------------------------------------- #ifndef __MATH_H #define __MATH_H __MATH_H +// TODO: Documentation + // ---------------------------------------------------------------------------- // DEFINES -#define HUGE_VAL // TODO -#define HUGE_VALF // TODO -#define HUGE_VALL // TODO +#define HUGE_VAL // TODO - personality? +#define HUGE_VALF // TODO - personality? +#define HUGE_VALL // TODO - personality? -#define INFINITY // TODO -#define NAN // TODO +#define INFINITY // TODO - personality? +#define NAN // TODO - personality? -#define FP_FAST_FMA // TODO -#define FP_FAST_FMAF // TODO -#define FP_FAST_FMAL // TODO +#define FP_FAST_FMA // TODO - personality? +#define FP_FAST_FMAF // TODO - personality? +#define FP_FAST_FMAL // TODO - personality? -#define FP_INFINITE // TODO -#define FP_NAN // TODO -#define FP_NORMAL // TODO -#define FP_SUBNORMAL // TODO -#define FP_ZERO // TODO +#define FP_INFINITE // TODO - personality? +#define FP_NAN // TODO - personality? +#define FP_NORMAL // TODO - personality? +#define FP_SUBNORMAL // TODO - personality? +#define FP_ZERO // TODO - personality? -#define FP_ILOGB0 // TODO -#define FP_ILOGBNAN // TODO +#define FP_ILOGB0 // TODO - personality? +#define FP_ILOGBNAN // TODO - personality? -#define MATH_ERRNO 1 -#define MATH_ERREXCEPT 2 -#define math_errhandling // TODO +#define MATH_ERRNO 1 // personality? +#define MATH_ERREXCEPT 2 // personality? +#define math_errhandling // TODO - personality? // -------------------------------------------------------------------------- // TYPEDEFS -typedef double_t; // TODO -typedef float_t; // TODO +typedef double_t; // TODO - personality? +typedef float_t; // TODO - personality? // -------------------------------------------------------------------------- // MACROS -#ifndef __cplusplus - -#define signbit( x ) // TODO -#define fpclassify( x ) // TODO -#define isfinite( x ) // TODO -#define isinf( x ) // TODO -#define isnan( x ) // TODO -#define isnormal( x ) // TODO - #define isgreater( x, y ) // TODO #define isgreaterequal( x, y ) // TODO #define isless( x, y ) // TODO #define islessequal( x, y ) // TODO #define islessgreater( x, y ) // TODO #define isunordered( x, y ) // TODO +#define fpclassify( x ) // TODO +#define isfinite( x ) // TODO -#else // __cplusplus - -// The same functionality as above is implemented as functions in C++. -bool signbit( float x ); -bool signbit( double x ); -bool signbit( long double x ); -int fpclassify( float x ); -int fpclassify( double x ); -int fpclassify( long double x ); -bool isfinite( float x ); -bool isfinite( double x ); -bool isfinite( long double x ); -bool isinf( float x ); -bool isinf( double x ); -bool isinf( long double x ); -bool isnan( float x ); -bool isnan( double x ); -bool isnan( long double x ); -bool isnormal( float x ); -bool isnormal( double x ); -bool isnormal( long double x ); -bool isgreater( float x, float y ); -bool isgreater( double x, double y ); -bool isgreater( long double x, long double y ); -bool isgreaterequal( float x, float y ); -bool isgreaterequal( double x, double y ); -bool isgreaterequal( long double x, long double y ); -bool isless( float x, float y ); -bool isless( double x, double y ); -bool isless( long double x, long double y ); -bool islessequal( float x, float y ); -bool islessequal( double x, double y ); -bool islessequal( long double x, long double y ); -bool islessgreater( float x, float y ); -bool islessgreater( double x, double y ); -bool islessgreater( long double x, long double y ); -bool isunordered( float x, float y ); -bool isunordered( double x, double y ); -bool isunordered( long double x, long double y ); - -#endif // __cplusplus - -// -------------------------------------------------------------------------- -// FUNCTIONS - C++ - -#ifdef __cplusplus - -// These functions return the magnitude of their parameter. -double abs( double x ); -float abs( float x ); -long double abs( long double x ); -float fabs( float x ); -long double fabs( long double x ); - -// These functions return the sine of their parameter. -float sin( float x ); -long double sin( long double x ); - -// These functions return the hyperbolic sine of their parameter. -float sinh( float x ); -long double sinh( long double x ); - -// These functions return the arcsine of their parameter. -float asin( float x ); -long double asin( long double x ); - -// These functions return the hyperbolic arcsine of their parameter. -float asinh( float x ); -long double asinh( long double x ); - -// These functions return the cosine of their parameter. -float cos( float x ); -long double cos( long double x ); - -// These functions return the hyperbolic cosine of their parameter. -float cosh( float x ); -long double cosh( long double x ); - -// These functions return the arccosine of their parameter. -float acos( float x ); -long double acos( long double x ); - -// These functions return the hyperbolic arccosine of their parameter. -float acosh( float x ); -long double acosh( long double x ); - -// These functions return the tangent of their parameter. -float tan( float x ); -long double tan( long double x ); - -// These functions return the hyperbolic tangent of their parameter. -float tanh( float x ); -long double tanh( long double x ); - -// These functions return the arctangent of their parameter. -float atan( float x ); -long double atan( long double x ); - -// These functions return the hyperbolic arctangent of their parameter. -float atanh( float x ); -long double atanh( long double x ); - -// TODO -float atan2( float x, float y ); -long double atan2( long double x, long double y ); - -// These functions return sqrt( x^2 + y^2 ). -float hypot( float x, float y ); -long double hypot( long double x, long double y ); - -// These functions return their parameter x, raised to the power y. -float pow( float x, float y ); -long double pow( long double x, long double y ); -double pow( double x, int y ); -float pow( float x, int y ); -long double pow( long double x, int y ); - -// These functions return the square root of their parameter. -float sqrt( float x ); -long double sqrt( long double x ); - -// TODO -float cbrt( float x ); -long double cbrt( long double x ); - -// TODO -float exp( float x ); -long double exp( long double x ); - -// TODO -float exp2( float x ); -long double exp2( long double x ); - -// TODO -float expm1( float x ); -long double expm1( long double x ); - -// TODO -float frexp( float x, int * exponent ); -long double frexp( long double x, int * exponent ); - -// TODO -float ldexp( float x, int exponent ); -long double ldexp( long double x, int exponent ); - -// These functions return the natural logarithm of their parameter. -float log( float x ); -long double log( long double x ); - -// These functions return the logarithm (base 10 ) of their parameter. -float log10( float x ); -long double log10( long double x ); - -// These functions return the logarithm (base 2 ) of their parameter. -float log2( float x ); -long double log2( long double x ); - -// TODO -float logb( float x ); -long double logb( long double x ); - -// TODO -int ilogb( float x ); -int ilogb( long double x ); - -// TODO -float log1p( float x ); -long double log1p( long double x ); - -// These functions return the smallest integer no larger than their parameter -float ceil( float x ); -long double ceil( long double x ); - -// These functions return the biggest integer no larger than their parameter. -float floor( float x ); -long double floor( long double x ); - -// TODO -float fmod( float x, float y ); -long double fmod( long double x, long double y ); - -// TODO -float modf( float x, float * integer ); -long double modf( long double x, long double * integer ); - -// These functions return their parameter x, with the sign of parameter y. -float copysign( float x, float y ); -long double copysign( long double x, long double y ); - -// TODO -float erf( float x ); -long double erf( long double x ); - -// TODO -float erfc( float x ); -long double erfc( long double x ); - -// TODO -float fdim( float x, float y ); -long double fdim( long double x, long double y ); - -// TODO -float fma( float x, float y, float z ); -long double fma( long double x, long double y, long double z ); - -// These functions return the larger of their parameters. -float fmax( float x, float y ); -long double fmax( long double x, long double y ); - -// These functions return the smaller of their parameters. -float fmin( float x, float y ); -long double fmin( long double x, long double y ); - -// TODO -long long llrint( float x ); -long long llrint( long double x ); -long lrint( float x ); -long lrint( long double x ); -float rint( float x ); -long double rint( long double x ); - -// TODO -long long llround( float x ); -long long llround( long double x ); -long lround( float x ); -long lround( long double x ); -float round( float x ); -long double round( long double x ); - -// TODO -float trunc( float x ); -long double trunc( long double x ); - -// TODO -float nearbyint( float x ); -long double nearbyint( long double x ); - -// TODO -float nextafter( float x, float y ); -long double nextafter( long double x, long double y ); - -// TODO -float nexttoward( float x, long double y ); -long double nexttoward( long double x, long double y ); - -// TODO -float remainder( float x, float y ); -long double remainder( long double x, long double y ); - -// TODO -float remquo( float x, float y, int * quotient ); -long double remquo( long double x, long double y, int * quotient ); - -// TODO -float scalbn( float x, int ex ); -long double scalbn( long double x, int ex ); - -// TODO -float scalbln( float x, long ex ); -long double scalbln( long double x, long ex ); - -// TODO -float lgamma( float x ); -long double lgamma( long double x ); - -// TODO -float tgamma( float x ); -long double tgamma( long double x ); - -#endif // __cplusplus +#define isinf( x ) // TODO +#define isnan( x ) // TODO +#define isnormal( x ) // TODO +#define signbit( x ) // TODO // ---------------------------------------------------------------------------- -// FUNCTIONS - Standard C +// FUNCTIONS -// These functions return the magnitude of its parameter. +// These functions return the magnitude of their parameter. double fabs( double x ); float fabsf( float x ); long double fabsl( long double x ); -// These functions return the sine of its parameter. +// These functions compute the sine of x (measured in radians). double sin( double x ); float sinf( float x ); long double sinl( long double x ); -// These functions return the hyperbolic cosine of its parameter. +// These functions return the hyperbolic cosine of their parameter. double sinh( double x ); float sinhf( float x ); long double sinhl( long double x ); -// These functions return the arcsine of its parameter. +// These functions return the arcsine of their parameter. double asin( double x ); float asinf( float x ); long double asinl( long double x ); @@ -361,17 +90,17 @@ double asinh( double x ); float asinhf( float x ); long double asinhl( long double x ); -// These functions return the cosine of its parameter. +// These functions compute the cosine of x (measured in radians). double cos( double x ); float cosf( float x ); long double cosl( long double x ); -// These functions return the hyperbolic cosine of its parameter. +// These functions return the hyperbolic cosine of their parameter. double cosh( double x ); float coshf( float x ); long double coshl( long double x ); -// These functions return the arccosine of its parameter. +// These functions return the arccosine of their parameter. double acos( double x ); float acosf( float x ); long double acosl( long double x ); @@ -381,17 +110,17 @@ double acosh( double x ); float acoshf( float x ); long double acoshl( long double x ); -// These functions return the tangent of its parameter. +// These functions return the tangent of x. double tan( double x ); float tanf( float x ); long double tanl( long double x ); -// These functions return the hyperbolic tangent of its parameter. +// These functions return the hyperbolic tangent of their parameter. double tanh( double x ); float tanhf( float x ); long double tanhl( long double x ); -// These functions return the arctangent of its parameter. +// These functions compute the arctangent of x. double atan( double x ); float atanf( float x ); long double atanl( long double x ); @@ -411,12 +140,12 @@ double hypot( double x, double y ); float hypotf( float x, float y ); long double hypotl( long double x, long double y ); -// These functions return its parameter x, raised to the power y. +// These functions return their parameter x, raised to the power y. double pow( double x, double y ); float powf( float x, float y ); long double powl( long double x, long double y ); -// These functions return the square root of its parameter. +// These functions return the square root of their parameter. double sqrt( double x ); float sqrtf( float x ); long double sqrtl( long double x ); @@ -451,12 +180,12 @@ double ldexp( double x, int exp ); float ldexpf( float x, int exp ); long double ldexpl( long double x, int exp ); -// These functions return the natural logarithm of its parameter. +// These functions return the natural logarithm of their parameter. double log( double x ); float logf( float x ); long double logl( long double x ); -// These functions return the logarithm (base 10 ) of its parameter. +// These functions return the logarithm (base 10 ) of their parameter. double log10( double x ); float log10f( float x ); long double log10l( long double x ); @@ -486,7 +215,7 @@ double ceil( double x ); float ceilf( float x ); long double ceill( long double x ); -// These functions return the largest integer no larger than its parameter. +// These functions return the largest integer no larger than their parameter. double floor( double x ); float floorf( float x ); long double floorl( long double x );