+++ /dev/null
-/* ----------------------------------------------------------------------------
- * $Id$
- * ----------------------------------------------------------------------------
- * Public Domain C Library - http://pdclib.sourceforge.net
- * This code is Public Domain. Use, modify, and redistribute at will.
- * ----------------------------------------------------------------------------
- * Mathematics
- * --------------------------------------------------------------------------*/
-
-#ifndef _MATH_H
-#define _MATH_H _MATH_H
-
-/* TODO: Documentation */
-
-/* ----------------------------------------------------------------------------
- * DEFINES
- * --------------------------------------------------------------------------*/
-
-#define HUGE_VAL ((double)0x7FF0000000000000) /* TODO */
-#define HUGE_VALF ((float)0x7F800000) /* TODO */
-#define HUGE_VALL ((long double)0x7FFF8000000000000000) /* TODO */
-
-#define INFINITY ((float)0x7F800000) /* TODO */
-#define NAN ((float)0x7F800001) /* TODO */
-
-/* The following values are platform dependant, must be personality. */
-#if 0
-#define FP_FAST_FMA /* TODO */
-#define FP_FAST_FMAF /* TODO */
-#define FP_FAST_FMAL /* TODO */
-#endif
-
-/* These values are used instead of constants to classify numbers. */
-#define FP_UNDEFINED 0
-#define FP_INFINITE 1
-#define FP_NAN 2
-#define FP_NORMAL 3
-#define FP_SUBNORMAL 4
-#define FP_ZERO 5
-
-#define FP_ILOGB0 /* TODO */
-#define FP_ILOGBNAN /* TODO */
-
-#define MATH_ERRNO 1
-#define MATH_ERREXCEPT 2
-
-/* should be MATH_ERRNO | MATH_ERREXCEPT if we do exceptions. Do we? It's
- * nice if this is implementation-wide the same.
- */
-#define math_errhandling ((int)MATH_ERRNO)
-
-/* ----------------------------------------------------------------------------
- * TYPEDEFS
- * --------------------------------------------------------------------------*/
-
-typedef double_t
-#if FLT_EVAL_METHOD == 0
- double
-#elif FLT_EVAL_METHOD == 1
- double
-#elif FLT_EVAL_METHOD == 2
- long double
-#else
- /* TODO - this is implementation defined and cpu dependant */
-#endif
-;
-
-typedef float_t
-#if FLT_EVAL_METHOD == 0
- float
-#elif FLT_EVAL_METHOD == 1
- double
-#elif FLT_EVAL_METHOD == 2
- long double
-#else
- /* TODO - this is implementation defined and cpu dependant */
-#endif
-;
-
-/* ----------------------------------------------------------------------------
- * MACROS
- * --------------------------------------------------------------------------*/
-
-#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 */
-
-/* Could somebody clean this macro up? It uses 7 other definitions (below).
- * Also, I suspect this macro to be personality-dependant. Somebody confirm
- * or deny?
- */
-#define fp_mef 0x7F800000
-#define fp_mff 0x007FFFFF
-#define fp_med 0x7FF0000000000000
-#define fp_mfd 0x000FFFFFFFFFFFFF
-#define fp_mel 0x7FFF8000000000000000
-#define fp_mjl 0x00004000000000000000 // the j-bit mask
-#define fp_mfl 0x00003FFFFFFFFFFFFFFF
-
-#define fpclassify( x ) ((sizeof(x) == sizeof(float)) ? ( \
- (((x) & fp_mef) == (fp_mef)) ? ( \
- (((x) & fp_mff) == (0)) ? ( \
- FP_INFINITY \
- ) : ( \
- FP_NAN \
- ) \
- ) : ( \
- (((x) & fp_mef) == (0)) ? ( \
- (((x) & fp_mff) == (0)) ? ( \
- FP_ZERO \
- ) : ( \
- FP_DENORMAL \
- ) \
- ) : ( \
- FP_NORMAL \
- ) \
- ) \
- ) : (
- (sizeof(x) == sizeof(double)) ? ( \
- (((x) & fp_med) == (fp_med)) ? ( \
- (((x) & fp_mfd) == (0)) ? ( \
- FP_INFINITY \
- ) : ( \
- FP_NAN \
- ) \
- ) : ( \
- (((x) & fp_med) == (0)) ? ( \
- (((x) & fp_mfd) == (0)) ? ( \
- FP_ZERO \
- ) : ( \
- FP_DENORMAL \
- ) \
- ) : ( \
- FP_NORMAL \
- ) \
- ) \
- ) : ( \
- (((x) & fp_mel) == (fp_mel)) ? ( \
- (((x) & fp_mjl) == (fp_mjl)) ? ( \
- FP_UNSUPPORTED \
- ) : ( \
- (((x) & fp_mfl) == (fp_mfl)) ? ( \
- FP_NAN \
- ) : ( \
- FP_INFINITY \
- ) \
- ) \
- ) : ( \
- (((x) & fp_mel) == (0)) ? ( \
- (((x) & fp_mjl) == (fp_mjl)) ? ( \
- FP_NORMAL \ // or actually, pseudo-denormal
- ) : ( \
- (((x) & fp_mfl) == (fp_mfl)) ? ( \
- FP_DENORMAL \
- ) : ( \
- FP_ZERO \
- ) \
- ) \
- ) : ( \
- (((x) & fp_mjl) == (fp_mjl)) ? ( \
- FP_NORMAL \
- ) : ( \
- FP_UNDEFINED \
- ) \
- ) \
- ) \
- ) \
- ) \
- )
-
-#define isfinite( x ) ((sizeof(x) == sizeof(float)) ? ( \
- (((x) & fp_mef) == (fp_mef)) ? ( \
- 0 \
- ) : ( \
- 1 \
- ) \
- ) : (
- (sizeof(x) == sizeof(double)) ? ( \
- (((x) & fp_med) == (fp_med)) ? ( \
- 0 \
- ) : ( \
- 1 \
- ) \
- ) : ( \
- (((x) & fp_mel) == (fp_mel)) ? ( \
- 0 \
- ) : ( \
- (((x) & fp_mel) == (0)) ? ( \
- (((x) & fp_mjl) == (fp_mjl)) ? ( \
- 1 \
- ) : ( \
- 0 \
- ) \
- ) : ( \
- (((x) & fp_mjl) == (fp_mjl)) ? ( \
- 1 \
- ) : ( \
- 0 \
- ) \
- ) \
- ) \
- ) \
- ) \
- )
-
-#define isinf( x ) ((sizeof(x) == sizeof(float)) ? ( \
- (((x) & fp_mef) == (fp_mef)) ? ( \
- (((x) & fp_mff) == (0)) ? ( \
- 1 \
- ) : ( \
- 0 \
- ) \
- ) : ( \
- 0 \
- ) \
- ) : ((sizeof(x) == sizeof(double)) ? ( \
- (((x) & fp_med) == (fp_med)) ? ( \
- (((x) & fp_mfd) == (0)) ? ( \
- 1 \
- ) : ( \
- 0 \
- ) \
- ) : ( \
- 0 \
- ) \
- ) : ( \
- (((x) & fp_mel) == (fp_mel)) ? ( \
- (((x) & fp_mjl) == (0)) ? ( \
- (((x) & fp_mfl) == (fp_mfl)) ? ( \
- 0 \
- ) : ( \
- 1 \
- ) \
- ) : ( \
- 0 \
- ) \
- ) : ( \
- 0 \
- ) \
- ) \
- ) \
- )
-
-#define isnan( x ) ((sizeof(x) == sizeof(float)) ? ( \
- (((x) & fp_mef) == (fp_mef)) ? ( \
- (((x) & fp_mff) == (0)) ? ( \
- 0 \
- ) : ( \
- 1 \
- ) \
- ) : ( \
- 0 \
- ) \
- ) : ((sizeof(x) == sizeof(double)) ? ( \
- (((x) & fp_med) == (fp_med)) ? ( \
- (((x) & fp_mfd) == (0)) ? ( \
- 0 \
- ) : ( \
- 1 \
- ) \
- ) : ( \
- 0 \
- ) \
- ) : ( \
- (((x) & fp_mel) == (fp_mel)) ? ( \
- (((x) & fp_mjl) == (0)) ? ( \
- (((x) & fp_mfl) == (fp_mfl)) ? ( \
- 1 \
- ) : ( \
- 0 \
- ) \
- ) : ( \
- 0 \
- ) \
- ) : ( \
- 0 \
- ) \
- ) \
- ) \
- )
-
-#define isnormal( x ) ((sizeof(x) == sizeof(float)) ? ( \
- (((x) & fp_mef) == (fp_mef)) ? ( \
- 0 \
- ) : ( \
- (((x) & fp_mef) == (0)) ? ( \
- 0 \
- ) : ( \
- 1 \
- ) \
- ) \
- ) : ((sizeof(x) == sizeof(double)) ? ( \
- (((x) & fp_med) == (fp_med)) ? ( \
- 0 \
- ) : ( \
- (((x) & fp_med) == (0)) ? ( \
- 0 \
- ) : ( \
- 1 \
- ) \
- ) \
- ) : ( \
- (((x) & fp_mel) == (fp_mel)) ? ( \
- 0 \
- ) : ( \
- (((x) & fp_mel) == (0)) ? ( \
- (((x) & fp_mjl) == (fp_mjl)) ? ( \
- 1 \
- ) : ( \
- 0 \
- ) \
- ) : ( \
- (((x) & fp_mjl) == (fp_mjl)) ? ( \
- 1 \
- ) : ( \
- 0 \
- ) \
- ) \
- ) \
- ) \
- ) \
- )
-
-#define signbit( x ) ((sizeof(x) == sizeof(float)) ? ( \
- (((x) & 0x80000000) == (0)) ? ( \
- 0 \
- ) : ( \
- 1 \
- ) \
- ) : ((sizeof(x) == sizeof(double)) ? ( \
- (((x) & 0x8000000000000000) == (0)) ? ( \
- 0 \
- ) : ( \
- 1 \
- ) \
- ) : ( \
- (((x) & 0x80000000000000000000) == (0)) ? ( \
- 0 \
- ) : ( \
- 1 \
- ) \
- ) \
- ) \
- )
-
-/* ----------------------------------------------------------------------------
- * FUNCTIONS
- * --------------------------------------------------------------------------*/
-
-/** These functions return the magnitude of x.
- * @param x The value to find the absolute value of.
- * @return The absolute value of x.
- * @see fabsl()
- * @see fabsf()
- */
-double fabs( double x );
-
-/** These functions return the magnitude of x.
- * @param x The value to find the absolute value of.
- * @return The absolute value of x.
- * @see fabsl()
- * @see fabs()
- */
-float fabsf( float x );
-
-/** These functions return the magnitude of x.
- * @param x The value to find the absolute value of.
- * @return The absolute value of x.
- * @see fabs()
- * @see fabsf()
- */
-long double fabsl( long double x );
-
-/** These functions compute the sine of x (measured in radians).
- * @param x The value to compute the sine of.
- * @return The sine of x.
- * @see sinf()
- * @see sinl()
- * @see cos()
- * @see tan()
- * @see sinh()
- * @see asin()
- */
-double sin( double x );
-
-/** These functions compute the sine of x (measured in radians).
- * @param x The value to compute the sine of.
- * @return The sine of x.
- * @see sin()
- * @see sinl()
- * @see cosf()
- * @see tanf()
- * @see sinhf()
- * @see asinf()
- */
-float sinf( float x );
-
-/** These functions compute the sine of x (measured in radians).
- * @param x The value to compute the sine of.
- * @return The sine of x.
- * @see sinf()
- * @see sin()
- * @see cosl()
- * @see tanl()
- * @see sinhl()
- * @see asinl()
- */
-long double sinl( long double x );
-
-/** These functions compute the hyperbolic sine of x (measured in radians).
- * @param x The value to compute the hyperbolic sine of.
- * @return The hyperbolic sine of x.
- * @see sinhf()
- * @see sinhl()
- * @see sin()
- * @see cosh()
- * @see tanh()
- * @see asinh()
- */
-double sinh( double x );
-
-/** These functions compute the hyperbolic sine of x (measured in radians).
- * @param x The value to compute the hyperbolic sine of.
- * @return The hyperbolic sine of x.
- * @see sinh()
- * @see sinhl()
- * @see sinf()
- * @see coshf()
- * @see tanhf()
- * @see asinhf()
- */
-float sinhf( float x );
-
-/** These functions compute the hyperbolic sine of x (measured in radians).
- * @param x The value to compute the hyperbolic sine of.
- * @return The hyperbolic sine of x.
- * @see sinh()
- * @see sinhf()
- * @see sinl()
- * @see coshl()
- * @see tanhl()
- * @see asinhl()
- */
-long double sinhl( long double x );
-
-/** These functions compute the arcsine of x (measured in radians).
- * @param x The value to compute the arcsine of.
- * @return The arcsine of x.
- * @see asinf()
- * @see asinl()
- * @see sin()
- * @see acos()
- * @see atan()
- * @see asinh()
- */
-double asin( double x );
-
-/** These functions compute the arcsine of x (measured in radians).
- * @param x The value to compute the arcsine of.
- * @return The arcsine of x.
- * @see asin()
- * @see asinl()
- * @see sinf()
- * @see acosf()
- * @see atanf()
- * @see asinhf()
- */
-float asinf( float x );
-
-/** These functions compute the arcsine of x (measured in radians).
- * @param x The value to compute the arcsine of.
- * @return The arcsine of x.
- * @see asin()
- * @see asinf()
- * @see sinl()
- * @see acosl()
- * @see atanl()
- * @see asinhl()
- */
-long double asinl( long double x );
-
-/** These functions compute the hyperbolic arcsine of x (measured in radians).
- * @param x The value to compute the hyperbolic arcsine of.
- * @return The hyperbolic arcsine of x.
- * @see asinhf()
- * @see asinhl()
- * @see asin()
- * @see acosh()
- * @see atanh()
- * @see sinh()
- */
-double asinh( double x );
-
-/** These functions compute the hyperbolic arcsine of x (measured in radians).
- * @param x The value to compute the hyperbolic arcsine of.
- * @return The hyperbolic arcsine of x.
- * @see asinh()
- * @see asinhl()
- * @see asinf()
- * @see acoshf()
- * @see atanhf()
- * @see sinhf()
- */
-float asinhf( float x );
-
-/** These functions compute the hyperbolic arcsine of x (measured in radians).
- * @param x The value to compute the hyperbolic arcsine of.
- * @return The hyperbolic arcsine of x.
- * @see asinh()
- * @see asinhf()
- * @see asinl()
- * @see acoshl()
- * @see atanhl()
- * @see sinhl()
- */
-long double asinhl( long double x );
-
-/** These functions compute the cosine of x (measured in radians).
- * @param x The value to compute the cosine of.
- * @return The cosine of x.
- * @see cosf()
- * @see cosl()
- * @see sin()
- * @see cosh()
- * @see tan()
- * @see acos()
- */
-double cos( double x );
-
-/** These functions compute the cosine of x (measured in radians).
- * @param x The value to compute the cosine of.
- * @return The cosine of x.
- * @see cos()
- * @see cosl()
- * @see sinf()
- * @see coshf()
- * @see tanf()
- * @see acosf()
- */
-float cosf( float x );
-
-/** These functions compute the cosine of x (measured in radians).
- * @param x The value to compute the cosine of.
- * @return The cosine of x.
- * @see cos()
- * @see cosf()
- * @see sinl()
- * @see coshl()
- * @see tanl()
- * @see acosl()
- */
-long double cosl( long double x );
-
-/** These functions compute the hyperbolic cosine of x (measured in radians).
- * @param x The value to compute the hyperbolic cosine of.
- * @return The hyperbolic cosine of x.
- * @see coshf()
- * @see coshl()
- * @see sinh()
- * @see cos()
- * @see tanh()
- * @see acosh()
- */
-double cosh( double x );
-
-/** These functions compute the hyperbolic cosine of x (measured in radians).
- * @param x The value to compute the hyperbolic cosine of.
- * @return The hyperbolic cosine of x.
- * @see cosh()
- * @see coshl()
- * @see sinhf()
- * @see cosf()
- * @see tanhf()
- * @see acoshf()
- */
-float coshf( float x );
-
-/** These functions compute the hyperbolic cosine of x (measured in radians).
- * @param x The value to compute the hyperbolic cosine of.
- * @return The hyperbolic cosine of x.
- * @see cosh()
- * @see coshf()
- * @see sinhl()
- * @see cosl()
- * @see tanhl()
- * @see acoshl()
- */
-long double coshl( long double x );
-
-/** These functions compute the arccosine of x (measured in radians).
- * @param x The value to compute the arccosine of.
- * @return The arccosine of x.
- * @see acosf()
- * @see acosl()
- * @see asin()
- * @see cos()
- * @see atan()
- * @see acosh()
- */
-double acos( double x );
-
-/** These functions compute the arccosine of x (measured in radians).
- * @param x The value to compute the arccosine of.
- * @return The arccosine of x.
- * @see acos()
- * @see acosl()
- * @see asinf()
- * @see cosf()
- * @see atanf()
- * @see acoshf()
- */
-float acosf( float x );
-
-/** These functions compute the arccosine of x (measured in radians).
- * @param x The value to compute the arccosine of.
- * @return The arccosine of x.
- * @see acos()
- * @see acosf()
- * @see asinl()
- * @see cosl()
- * @see atanl()
- * @see acoshl()
- */
-long double acosl( long double x );
-
-/** These functions compute the hyperbolic arccosine of x (measured in radians).
- * @param x The value to compute the hyperbolic arccosine of.
- * @return The hyperbolic arccosine of x.
- * @see acoshf()
- * @see acoshl()
- * @see asinh()
- * @see cosh()
- * @see atanh()
- * @see acos()
- */
-double acosh( double x );
-
-/** These functions compute the hyperbolic arccosine of x (measured in radians).
- * @param x The value to compute the hyperbolic arccosine of.
- * @return The hyperbolic arccosine of x.
- * @see acosh()
- * @see acoshl()
- * @see asinhf()
- * @see coshf()
- * @see atanhf()
- * @see acosf()
- */
-float acoshf( float x );
-
-/** These functions compute the hyperbolic arccosine of x (measured in radians).
- * @param x The value to compute the hyperbolic arccosine of.
- * @return The hyperbolic arccosine of x.
- * @see acosh()
- * @see acoshf()
- * @see asinhl()
- * @see coshl()
- * @see atanhl()
- * @see acosl()
- */
-long double acoshl( long double x );
-
-/** These functions compute the tangent of x (measured in radians).
- * @param x The value to compute the tangent of.
- * @return The tangent of x.
- * @see tanf()
- * @see tanl()
- * @see sin()
- * @see cos()
- * @see tanh()
- * @see atan()
- */
-double tan( double x );
-
-/** These functions compute the tangent of x (measured in radians).
- * @param x The value to compute the tangent of.
- * @return The tangent of x.
- * @see tan()
- * @see tanl()
- * @see sinf()
- * @see cosf()
- * @see tanhf()
- * @see atanf()
- */
-float tanf( float x );
-
-/** These functions compute the tangent of x (measured in radians).
- * @param x The value to compute the tangent of.
- * @return The tangent of x.
- * @see tan()
- * @see tanf()
- * @see sinl()
- * @see cosl()
- * @see tanhl()
- * @see atanl()
- */
-long double tanl( long double x );
-
-/** These functions compute the hyperbolic tangent of x (measured in radians).
- * @param x The value to compute the hyperbolic tangent of.
- * @return The hyperbolic tangent of x.
- * @see tanhf()
- * @see tanhl()
- * @see sinh()
- * @see cosh()
- * @see tan()
- * @see atanh()
- */
-double tanh( double x );
-
-/** These functions compute the hyperbolic tangent of x (measured in radians).
- * @param x The value to compute the hyperbolic tangent of.
- * @return The hyperbolic tangent of x.
- * @see tanh()
- * @see tanhl()
- * @see sinhf()
- * @see coshf()
- * @see tanf()
- * @see atanhf()
- */
-float tanhf( float x );
-
-/** These functions compute the hyperbolic tangent of x (measured in radians).
- * @param x The value to compute the hyperbolic tangent of.
- * @return The hyperbolic tangent of x.
- * @see tanh()
- * @see tanhf()
- * @see sinhl()
- * @see coshl()
- * @see tanl()
- * @see atanhl()
- */
-long double tanhl( long double x );
-
-/** These functions compute the arctangent of x (measured in radians).
- * @param x The value to compute the arctangent of.
- * @return The arctangent of x.
- * @see atanf()
- * @see atanl()
- * @see atan2()
- * @see asin()
- * @see acos()
- * @see tan()
- * @see atanh()
- */
-double atan( double x );
-
-/** These functions compute the arctangent of x (measured in radians).
- * @param x The value to compute the arctangent of.
- * @return The arctangent of x.
- * @see atan()
- * @see atanl()
- * @see atan2f()
- * @see asinf()
- * @see acosf()
- * @see tanf()
- * @see atanhf()
- */
-float atanf( float x );
-
-/** These functions compute the arctangent of x (measured in radians).
- * @param x The value to compute the arctangent of.
- * @return The arctangent of x.
- * @see atan()
- * @see atanf()
- * @see atan2l()
- * @see asinl()
- * @see acosl()
- * @see tanl()
- * @see atanhl()
- */
-long double atanl( long double x );
-
-/** These functions compute the hyperbolic arctangent of x (measured in radians).
- * @param x The value to compute the hyperbolic arctangent of.
- * @return The hyperbolic arctangent of x.
- * @see atanhf()
- * @see atanhl()
- * @see asinh()
- * @see acosh()
- * @see tanh()
- * @see atan()
- */
-double atanh( double x );
-
-/** These functions compute the hyperbolic arctangent of x (measured in radians).
- * @param x The value to compute the hyperbolic arctangent of.
- * @return The hyperbolic arctangent of x.
- * @see atanh()
- * @see atanhl()
- * @see asinhf()
- * @see acoshf()
- * @see tanhf()
- * @see atanf()
- */
-float atanhf( float x );
-
-/** These functions compute the hyperbolic arctangent of x (measured in radians).
- * @param x The value to compute the hyperbolic arctangent of.
- * @return The hyperbolic arctangent of x.
- * @see atanh()
- * @see atanhf()
- * @see asinhl()
- * @see acoshl()
- * @see tanhl()
- * @see atanl()
- */
-long double atanhl( long double x );
-
-/** These functions compute the hyperbolic arctangent of x / y (measured in radians).
- * They return their answer between pi and -pi.
- * @param y The first side of the triangle.
- * @param x The second side of the triangle.
- * @return The angle between the first and the second side.
- * @see atan2f()
- * @see atan2l()
- * @see atan()
- * @see asin()
- * @see acos()
- * @see atanh()
- * @see tanh()
- */
-double atan2( double y, double x );
-
-/** These functions compute the hyperbolic arctangent of x / y (measured in radians).
- * They return their answer between pi and -pi.
- * @param y The first side of the triangle.
- * @param x The second side of the triangle.
- * @return The angle between the first and the second side.
- * @see atan2f()
- * @see atan2l()
- * @see atanf()
- * @see asinf()
- * @see acosf()
- * @see atanhf()
- * @see tanhf()
- */
-float atan2f( float y, float x );
-
-/** These functions compute the hyperbolic arctangent of x / y (measured in radians).
- * They return their answer between pi and -pi.
- * @param y The first side of the triangle.
- * @param x The second side of the triangle.
- * @return The angle between the first and the second side.
- * @see atan2f()
- * @see atan2l()
- * @see atanl()
- * @see asinl()
- * @see acosl()
- * @see atanhl()
- * @see tanhl()
- */
-long double atan2l( long double y, long double x );
-
-/** These functions compute the hypotenuse of a straight triangle.
- * @param x The length of one side of the triangle.
- * @param y The length of the other side of the triangle.
- * @return The length of the hypotenuse, according to h = sqrt(x*x+y*y).
- * @see hypotf()
- * @see hypotl()
- */
-double hypot( double x, double y );
-
-/** These functions compute the hypotenuse of a straight triangle.
- * @param x The length of one side of the triangle.
- * @param y The length of the other side of the triangle.
- * @return The length of the hypotenuse, according to h = sqrt(x*x+y*y).
- * @see hypot()
- * @see hypotl()
- */
-float hypotf( float x, float y );
-
-/** These functions compute the hypotenuse of a straight triangle.
- * @param x The length of one side of the triangle.
- * @param y The length of the other side of the triangle.
- * @return The length of the hypotenuse, according to h = sqrt(x*x+y*y).
- * @see hypot()
- * @see hypotf()
- */
-long double hypotl( long double x, long double y );
-
-/** These functions compute x raised to the power y.
- * @param x The base of the power.
- * @param y The exponent of the power.
- * @return The base raised to the power of the exponent.
- * @see powf()
- * @see powl()
- */
-double pow( double x, double y );
-
-/** These functions compute x raised to the power y.
- * @param x The base of the power.
- * @param y The exponent of the power.
- * @return The base raised to the power of the exponent.
- * @see pow()
- * @see powl()
- */
-float powf( float x, float y );
-
-/** These functions compute x raised to the power y.
- * @param x The base of the power.
- * @pa am y The exponent of the power.
- * @return The base raised to the power of the exponent.
- * @see pow()
- * @see powf()
- */
-long double powl( long double x, long double y );
-
-/** These functions compute the square root of x.
- * @param x The value to take the square root of.
- * @return The square root of x.
- * @see sqrtf()
- * @see sqrtl()
- */
-double sqrt( double x );
-
-/** These functions compute the square root of x.
- * @param x The value to take the square root of.
- * @return The square root of x.
- * @see sqrt()
- * @see sqrtl()
- */
-float sqrtf( float x );
-
-/** These functions compute the square root of x.
- * @param x The value to take the square root of.
- * @return The square root of x.
- * @see sqrt()
- * @see sqrtf()
- */
-long double sqrtl( long double x );
-
-/* TODO */
-double cbrt( double x );
-float cbrtf( float x );
-long double cbrtl( long double x );
-
-/* TODO */
-double exp( double x );
-float expf( float x );
-long double expl( long double x );
-
-/* TODO */
-double exp2( double x );
-float exp2f( float x );
-long double exp2l( long double x );
-
-/* TODO */
-double expm1( double x );
-float expm1f( float x );
-long double expm1l( long double x );
-
-/* TODO */
-double frexp( double x, int * exp );
-float frexpf( float x, int * exp );
-long double frexpl( long double x, int * exp );
-
-/* TODO */
-double ldexp( double x, int exp );
-float ldexpf( float x, int exp );
-long double ldexpl( long double x, int exp );
-
-/** These functions compute the logarithm (base e) of x.
- * @param x The value to take the logarithm of.
- * @return The logarithm of x.
- * @see logf()
- * @see logl()
- * @todo is this really the natural logarithm? wouldn't it be ln()?
- */
-double log( double x );
-
-/** These functions compute the logarithm (base e) of x.
- * @param x The value to take the logarithm of.
- * @return The logarithm of x.
- * @see log()
- * @see logl()
- * @todo is this really the natural logarithm? wouldn't it be ln()?
- */
-float logf( float x );
-
-/** These functions compute the logarithm (base e) of x.
- * @param x The value to take the logarithm of.
- * @return The logarithm of x.
- * @see log()
- * @see logf()
- * @todo is this really the natural logarithm? wouldn't it be ln()?
- */
-long double logl( long double x );
-
-/** These functions compute the logarithm (base 10) of x.
- * @param x The value to take the logarithm of.
- * @return The logarithm of x.
- * @see log10f()
- * @see log10l()
- */
-double log10( double x );
-
-/** These functions compute the logarithm (base 10) of x.
- * @param x The value to take the logarithm of.
- * @return The logarithm of x.
- * @see log10()
- * @see log10l()
- */
-float log10f( float x );
-
-/** These functions compute the logarithm (base 10) of x.
- * @param x The value to take the logarithm of.
- * @return The logarithm of x.
- * @see log10()
- * @see log10f()
- */
-long double log10l( long double x );
-
-/** These functions compute the logarithm (base 2) of x.
- * @param x The value to take the logarithm of.
- * @return The logarithm of x.
- * @see log2f()
- * @see log2l()
- */
-double log2( double x );
-
-/** These functions compute the logarithm (base 2) of x.
- * @param x The value to take the logarithm of.
- * @return The logarithm of x.
- * @see log2()
- * @see log2l()
- */
-float log2f( float x );
-
-/** These functions compute the logarithm (base 2) of x.
- * @param x The value to take the logarithm of.
- * @return The logarithm of x.
- * @see log2()
- * @see log2f()
- */
-long double log2l( long double x );
-
-/* TODO */
-double logb( double x );
-float logbf( float x );
-long double logbl( long double x );
-
-/* TODO */
-int ilogb( double x );
-int ilogbf( float x );
-int ilogbl( long double x );
-
-/* TODO */
-double log1p( double x );
-float log1pf( float x );
-long double log1pl( long double x );
-
-/** These functions increase x to the next whole number.
- * @param x The value to increase.
- * @return The next whole number after x.
- * @see ceilf()
- * @see ceill()
- */
-double ceil( double x );
-
-/** These functions increase x to the next whole number.
- * @param x The value to increase.
- * @return The next whole number after x.
- * @see ceil()
- * @see ceill()
- */
-float ceilf( float x );
-
-/** These functions increase x to the next whole number.
- * @param x The value to increase.
- * @return The next whole number after x.
- * @see ceil()
- * @see ceilf()
- */
-long double ceill( long double x );
-
-/** These functions decrease x to the previous whole number.
- * @param x The value to decrease.
- * @return The previous whole number before x.
- * @see floorf()
- * @see floorl()
- */
-double floor( double x );
-
-/** These functions decrease x to the previous whole number.
- * @param x The value to decrease.
- * @return The previous whole number before x.
- * @see floor()
- * @see floorl()
- */
-float floorf( float x );
-
-/** These functions decrease x to the previous whole number.
- * @param x The value to decrease.
- * @return The previous whole number before x.
- * @see floor()
- * @see floorf()
- */
-long double floorl( long double x );
-
-/** These functions compute the modulus of x and y.
- * @param x The value to take the modulus of.
- * @param y The modulus.
- * @return The value of x modulus y.
- * @see fmodf()
- * @see fmodl()
- */
-double fmod( double x, double y );
-
-/** These functions compute the modulus of x and y.
- * @param x The value to take the modulus of.
- * @param y The modulus.
- * @return The value of x modulus y.
- * @see fmod()
- * @see fmodl()
- */
-float fmodf( float x, float y );
-
-/** These functions compute the modulus of x and y.
- * @param x The value to take the modulus of.
- * @param y The modulus.
- * @return The value of x modulus y.
- * @see fmod()
- * @see fmodf()
- */
-long double fmodl( long double x, long double y );
-
-/* TODO */
-double modf( double x, double * integer );
-float modff( float x, float * integer );
-long double modfl( long double x, long double * integer );
-
-/** These functions return x with the sign of y.
- * @param x The value to set the sign of.
- * @param y The value from which to read the sign.
- * @return The magnitude of x with the sign of y.
- * @see copysignf()
- * @see copysignl()
- */
-double copysign( double x, double y );
-
-/** These functions return x with the sign of y.
- * @param x The value to set the sign of.
- * @param y The value from which to read the sign.
- * @return The magnitude of x with the sign of y.
- * @see copysign()
- * @see copysignl()
- */
-float copysignf( float x, float y );
-
-/** These functions return x with the sign of y.
- * @param x The value to set the sign of.
- * @param y The value from which to read the sign.
- * @return The magnitude of x with the sign of y.
- * @see copysign()
- * @see copysignf()
- */
-long double copysignl( long double x, long double y );
-
-/* TODO */
-double erf( double x );
-float erff( float x );
-long double erfl( long double x );
-
-/* TODO */
-double erfc( double x );
-float erfcf( float x );
-long double erfcl( long double x );
-
-/* TODO */
-double fdim( double x, double y );
-float fdimf( float x, float y );
-long double fdiml( long double x, long double y );
-
-/* TODO */
-double fma( double x, double y, double z );
-float fmaf( float x, float y, float z );
-long double fmal( long double x, long double y, long double z );
-
-/** These functions return the largest of the parameters.
- * @param x The first candidate.
- * @param y The second candidate.
- * @return The largest of x and y.
- * @see fmaxf()
- * @see fmaxl()
- */
-double fmax( double x, double y );
-
-/** These functions return the largest of the parameters.
- * @param x The first candidate.
- * @param y The second candidate.
- * @return The largest of x and y.
- * @see fmax()
- * @see fmaxl()
- */
-float fmaxf( float x, float y );
-
-/** These functions return the largest of the parameters.
- * @param x The first candidate.
- * @param y The second candidate.
- * @return The largest of x and y.
- * @see fmax()
- * @see fmaxf()
- */
-long double fmaxl( long double x, long double y );
-
-/** These functions return the smallest of the parameters.
- * @param x The first candidate.
- * @param y The second candidate.
- * @return The smallest of x and y.
- * @see fminf()
- * @see fminl()
- */
-double fmin( double x, double y );
-
-/** These functions return the smallest of the parameters.
- * @param x The first candidate.
- * @param y The second candidate.
- * @return The smallest of x and y.
- * @see fmin()
- * @see fminl()
- */
-float fminf( float x, float y );
-
-/** These functions return the smallest of the parameters.
- * @param x The first candidate.
- * @param y The second candidate.
- * @return The smallest of x and y.
- * @see fmin()
- * @see fminf()
- */
-long double fminl( long double x, long double y );
-
-/* TODO */
-long long llrint( double x );
-long long llrintf( float x );
-long long llrintl( long double x );
-long lrint( double x );
-long lrintf( float x );
-long lrintl( long double x );
-double rint( double x );
-float rintf( float x );
-long double rintl( long double x );
-
-/* TODO - These functions return their parameter correctly rounded according
- * to the current rounding settings.
- */
-long long llround( double x );
-long long llroundf( float x );
-long long llroundl( long double x );
-long lround( double x );
-long lroundf( float x );
-long lroundl( long double x );
-double round( double x );
-float roundf( float x );
-long double roundl( long double x );
-
-/* TODO - These functions return their parameter with its decimal part
- * truncated.
- */
-double trunc( double x );
-float truncf( float x );
-long double truncl( long double x );
-
-double nearbyint( double x );
-float nearbyintf( float x );
-long double nearbyintl( long double x );
-
-double nextafter( double x, double y );
-float nextafterf( float x, float y );
-long double nextafterl( long double x, long double y );
-
-/* TODO */
-double nexttoward( double x, long double y );
-float nexttowardf( float x, long double y );
-long double nexttowardl( long double x, long double y );
-
-/* TODO - These functions divide parameter x by parameter y and return the
- * remainder.
- */
-double remainder( double x, double y );
-float remainderf( float x, float y );
-long double remainderl( long double x, long double y );
-
-/* TODO */
-double remquo( double x, double y, int * pquo );
-float remquof( float x, float y, int * pquo );
-long double remquol( long double x, long double y, int * pquo );
-
-/* TODO */
-double scalbn( double x, int ex );
-float scalbnf( float x, int ex );
-long double scalbnl( long double x, int ex );
-
-/* TODO */
-double scalbln( double x, long ex );
-float scalblnf( float x, long ex );
-long double scalblnl( long double x, long ex );
-
-/* TODO */
-double lgamma( double x );
-float lgammaf( float x );
-long double lgammal( long double x );
-
-/* TODO */
-double tgamma( double x );
-float tgammaf( float x );
-long double tgammal( long double x );
-
-/* TODO */
-double nan( const char *str );
-float nanf( const char *str );
-long double nanl( const char *str );
-
-#endif /* _MATH_H */
+++ /dev/null
-/* ----------------------------------------------------------------------------
- * $Id$
- * ----------------------------------------------------------------------------
- * Public Domain C Library - http://pdclib.sourceforge.net
- * This code is Public Domain. Use, modify, and redistribute at will.
- * ----------------------------------------------------------------------------
- * Extended multibyte and wide character utilities
- * --------------------------------------------------------------------------*/
-
-#ifndef _WCHAR_H
-#define _WCHAR_H _CHAR_H
-
-#ifndef _NULL
-#include "__intern.h"
-#endif
-
-/* TODO: Documentation */
-
-/* ----------------------------------------------------------------------------
- * MACROS
- * --------------------------------------------------------------------------*/
-
-#define NULL _NULL
-#define WCHAR_MAX _WCHAR_MAX
-#define WCHAR_MIN _WCHAR_MIN
-#define WEOF _WEOF
-
-/* ----------------------------------------------------------------------------
- * TYPEDEFS
- * --------------------------------------------------------------------------*/
-
-/* TODO: Get struct tm into __intern.h */
-
-#ifndef _SIZE_T
-#define _SIZE_T _SIZE_T
-typedef __size_t size_t;
-#endif /* _SIZE_T */
-
-#ifndef _WCHAR_T
-#define _WCHAR_T _WCHAR_T
-typedef __wchar_t wchar_t;
-#endif /* _WCHAR_T */
-
-#ifndef _WINT_T
-#define _WINT_T _WINT_T
-typedef __wint_t wint_t;
-#endif /* _WINT_T */
-
-typedef mbstate_t; /* TODO - to __intern.h / __personality.h? */
-
-/* ----------------------------------------------------------------------------
- * FUNCTIONS
- * --------------------------------------------------------------------------*/
-
-wint_t fgetwc( FILE * stream );
-wchar_t * fgetws( wchar_t * restrict s, int n, FILE * restrict stream );
-wint_t fputwc( wchar_t c, FILE * stream );
-int fputws( const wchar_t * restrict s, FILE * restrict stream );
-int fwide( FILE * stream, int mode );
-wint_t getwc( FILE * stream );
-wint_t getwchar( void );
-wint_t putwc( wchar_t c, FILE * stream );
-wint_t putwchar( wchar_t c );
-wint_t ungetwc( wint_t c, FILE * stream );
-
-int fwscanf( FILE * restrict stream, const wchar_t * restrict format, ... );
-int swscanf( const wchar_t * restrict s, const wchar_t * restrict format, ... );
-int wscanf( const wchar_t * restrict format, ... );
-int fwprintf( FILE * restrict stream, const wchar_t * restrict format, ... );
-int swprintf( wchar_t * restrict s, size_t n, const wchar_t * restrict format, ... );
-int wprintf( const wchar_t * restrict format, ... );
-int vfwscanf( FILE * restrict stream, const wchar_t * restrict format, va_list arg );
-int vswscanf( const wchar_t * restrict s, size_t n, const wchar_t * restrict format, va_list arg );
-int vwscanf( const wchar_t * restrict format, va_list arg );
-int vfwprintf( FILE * restrict stream, const wchar_t * restrict format, va_list arg );
-int vswprintf( wchar_t * restrict s, size_t n, const wchar_t * restrict format, va_list arg );
-int vwprintf( const wchar_t * restrict format, va_list arg );
-
-size_t wcsftime( wchar_t * restrict s, size_t maxsize, const wchar_t * restrict format, const struct tm * restrict timeptr );
-
-wint_t btowc( int c );
-size_t mbrlen( const char * restrict s, size_t n, mbstate_t * restrict ps );
-size_t mbrtowc( wchar_t * restrict pwc, const char * restrict s, size_t n, mbstate_t * restrict ps );
-int mbsinit( const mbstate_t * ps );
-size_t mbsrtowcs( wchar_t * restrict dst, const char * * restrict src, size_t len, mbstate_t * restrict ps );
-size_t wcrtomb( char * restrict s, wchar_t wc, mbstate_t * restrict ps );
-size_t wcsrtombs(char * restrict dst, const wchar_t * * restrict src, size_t len, mbstate_t * restrict ps );
-double wcstod( const wchar_t * restrict nptr, wchar_t * * restrict endptr );
-float wcstof( const wchar_t * restrict nptr, wchar_t * * restrict endptr);
-long double wcstold( const wchar_t * restrict nptr, wchar_t * * restrict endptr);
-long long wcstoll( const wchar_t * restrict nptr, wchar_t * * restrict endptr, int base );
-unsigned long long wcstoull( const wchar_t * restrict nptr, wchar_t * * restrict endptr, int base );
-long wcstol( const wchar_t * restrict nptr, wchar_t * * restrict endptr, int base );
-unsigned long wcstoul( const wchar_t * restrict nptr, wchar_t * * restrict endptr, int base );
-int wctob( wint_t c );
-
-wchar_t * wcscat( wchar_t * restrict s1, const wchar_t * restrict s2);
-int wcscmp( const wchar_t * s1, const wchar_t * s2 );
-int wcscoll( const wchar_t * s1, const wchar_t * s2 );
-wchar_t * wcscpy( wchar_t * restrict s1, const wchar_t * restrict s2 );
-size_t wcscspn( const wchar_t * s1, const wchar_t * s2 );
-size_t wcslen( const wchar_t * s );
-wchar_t * wcsncat( wchar_t * restrict s1, const wchar_t * restrict s2, size_t n );
-int wcsncmp( const wchar_t * s1, const wchar_t * s2, size_t n );
-wchar_t * wcsncpy( wchar_t * restrict s1, const wchar_t * restrict s2, size_t n );
-size_t wcsspn( const wchar_t * s1, const wchar_t * s2 );
-wchar_t * wcsstr( const wchar_t * s1, const wchar_t * s2 );
-wchar_t * wcstok( wchar_t * restrict s1, const wchar_t * restrict s2, wchar_t * * restrict ptr );
-size_t wcsxfrm( wchar_t * restrict s1, const wchar_t * restrict s2, size_t n );
-int wmemcmp( const wchar_t * s1, const wchar_t * s2, size_t n );
-wchar_t * wmemcpy( wchar_t * restrict s1, const wchar_t * restrict s2, size_t n );
-wchar_t * wmemmove( wchar_t * s1, const wchar_t * s2, size_t n );
-wchar_t * wmemset( wchar_t * s, wchar_t c, size_t n );
-
-wchar_t * wcschr( const wchar_t * s, wchar_t c );
-wchar_t * wcspbrk( const wchar_t * s1, const wchar_t * s2 );
-wchar_t * wcsrchr( const wchar_t * s, wchar_t c );
-wchar_t * wcsstr( const wchar_t * s1, const wchar_t * s2 );
-wchar_t * wmemchr( const wchar_t * s, wchar_t c, size_t n);
-
-#endif /* _WCHAR_H */