Mercurial > projects > ldc
diff lphobos/std/c/math.d @ 1:c53b6e3fe49a trunk
[svn r5] Initial commit. Most things are very rough.
author | lindquist |
---|---|
date | Sat, 01 Sep 2007 21:43:27 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lphobos/std/c/math.d Sat Sep 01 21:43:27 2007 +0200 @@ -0,0 +1,291 @@ + +/** + * C's <math.h> + * Authors: Walter Bright, Digital Mars, www.digitalmars.com + * License: Public Domain + * Macros: + * WIKI=Phobos/StdCMath + */ + +module std.c.math; + +extern (C): + +alias float float_t; /// +alias double double_t; /// + +const double HUGE_VAL = double.infinity; /// +const float HUGE_VALF = float.infinity; /// ditto +const real HUGE_VALL = real.infinity; /// ditto + +const float INFINITY = float.infinity; /// +const float NAN = float.nan; /// + +enum +{ + FP_NANS, // extension + FP_NANQ, // extension + FP_INFINITE, /// + FP_NAN = FP_NANQ, /// + FP_NORMAL = 3, /// + FP_SUBNORMAL = 4, /// + FP_ZERO = 5, /// + FP_EMPTY = 6, // extension + FP_UNSUPPORTED = 7, // extension +} + +enum +{ + FP_FAST_FMA = 0, /// + FP_FAST_FMAF = 0, /// + FP_FAST_FMAL = 0, /// +} + +const int FP_ILOGB0 = int.min; /// +const int FP_ILOGBNAN = int.min; /// + +const int MATH_ERRNO = 1; /// +const int MATH_ERREXCEPT = 2; /// +const int math_errhandling = MATH_ERRNO | MATH_ERREXCEPT; /// + +double acos(double x); /// +float acosf(float x); /// ditto +real acosl(real x); /// ditto + +double asin(double x); /// +float asinf(float x); /// ditto +real asinl(real x); /// ditto + +double atan(double x); /// +float atanf(float x); /// ditto +real atanl(real x); /// ditto + +double atan2(double y, double x); /// +float atan2f(float y, float x); /// ditto +real atan2l(real y, real x); /// ditto + +double cos(double x); /// +float cosf(float x); /// ditto +real cosl(real x); /// ditto + +double sin(double x); /// +float sinf(float x); /// ditto +real sinl(real x); /// ditto + +double tan(double x); /// +float tanf(float x); /// ditto +real tanl(real x); /// ditto + +double acosh(double x); /// +float acoshf(float x); /// ditto +real acoshl(real x); /// ditto + +double asinh(double x); /// +float asinhf(float x); /// ditto +real asinhl(real x); /// ditto + +double atanh(double x); /// +float atanhf(float x); /// ditto +real atanhl(real x); /// ditto + +double cosh(double x); /// +float coshf(float x); /// ditto +real coshl(real x); /// ditto + +double sinh(double x); /// +float sinhf(float x); /// ditto +real sinhl(real x); /// ditto + +double tanh(double x); /// +float tanhf(float x); /// ditto +real tanhl(real x); /// ditto + +double exp(double x); /// +float expf(float x); /// ditto +real expl(real x); /// ditto + +double exp2(double x); /// +float exp2f(float x); /// ditto +real exp2l(real x); /// ditto + +double expm1(double x); /// +float expm1f(float x); /// ditto +real expm1l(real x); /// ditto + +double frexp(double value, int *exp); /// +float frexpf(float value, int *exp); /// ditto +real frexpl(real value, int *exp); /// ditto + +int ilogb(double x); /// +int ilogbf(float x); /// ditto +int ilogbl(real x); /// ditto + +double ldexp(double x, int exp); /// +float ldexpf(float x, int exp); /// ditto +real ldexpl(real x, int exp); /// ditto + +double log(double x); /// +float logf(float x); /// ditto +real logl(real x); /// ditto + +double log10(double x); /// +float log10f(float x); /// ditto +real log10l(real x); /// ditto + +double log1p(double x); /// +float log1pf(float x); /// ditto +real log1pl(real x); /// ditto + +double log2(double x); /// +float log2f(float x); /// ditto +real log2l(real x); /// ditto + +double logb(double x); /// +float logbf(float x); /// ditto +real logbl(real x); /// ditto + +double modf(double value, double *iptr); /// +float modff(float value, float *iptr); /// ditto +real modfl(real value, real *iptr); /// ditto + +double scalbn(double x, int n); /// +float scalbnf(float x, int n); /// ditto +real scalbnl(real x, int n); /// ditto + +double scalbln(double x, int n); /// +float scalblnf(float x, int n); /// ditto +real scalblnl(real x, int n); /// ditto + +double cbrt(double x); /// +float cbrtf(float x); /// ditto +real cbrtl(real x); /// ditto + +double fabs(double x); /// +float fabsf(float x); /// ditto +real fabsl(real x); /// ditto + +double hypot(double x, double y); /// +float hypotf(float x, float y); /// ditto +real hypotl(real x, real y); /// ditto + +double pow(double x, double y); /// +float powf(float x, float y); /// ditto +real powl(real x, real y); /// ditto + +double sqrt(double x); /// +float sqrtf(float x); /// ditto +real sqrtl(real x); /// ditto + +double erf(double x); /// +float erff(float x); /// ditto +real erfl(real x); /// ditto + +double erfc(double x); /// +float erfcf(float x); /// ditto +real erfcl(real x); /// ditto + +double lgamma(double x); /// +float lgammaf(float x); /// ditto +real lgammal(real x); /// ditto + +double tgamma(double x); /// +float tgammaf(float x); /// ditto +real tgammal(real x); /// ditto + +double ceil(double x); /// +float ceilf(float x); /// ditto +real ceill(real x); /// ditto + +double floor(double x); /// +float floorf(float x); /// ditto +real floorl(real x); /// ditto + +double nearbyint(double x); /// +float nearbyintf(float x); /// ditto +real nearbyintl(real x); /// ditto + +double rint(double x); /// +float rintf(float x); /// ditto +real rintl(real x); /// ditto + +int lrint(double x); /// +int lrintf(float x); /// ditto +int lrintl(real x); /// ditto + +long llrint(double x); /// +long llrintf(float x); /// ditto +long llrintl(real x); /// ditto + +double round(double x); /// +float roundf(float x); /// ditto +real roundl(real x); /// ditto + +int lround(double x); /// +int lroundf(float x); /// ditto +int lroundl(real x); /// ditto + +long llround(double x); /// +long llroundf(float x); /// ditto +long llroundl(real x); /// ditto + +double trunc(double x); /// +float truncf(float x); /// ditto +real truncl(real x); /// ditto + +double fmod(double x, double y); /// +float fmodf(float x, float y); /// ditto +real fmodl(real x, real y); /// ditto + +double remainder(double x, double y); /// +float remainderf(float x, float y); /// ditto +real remainderl(real x, real y); /// ditto + +double remquo(double x, double y, int *quo); /// +float remquof(float x, float y, int *quo); /// ditto +real remquol(real x, real y, int *quo); /// ditto + +double copysign(double x, double y); /// +float copysignf(float x, float y); /// ditto +real copysignl(real x, real y); /// ditto + +double nan(char *tagp); /// +float nanf(char *tagp); /// ditto +real nanl(char *tagp); /// ditto + +double nextafter(double x, double y); /// +float nextafterf(float x, float y); /// ditto +real nextafterl(real x, real y); /// ditto + +double nexttoward(double x, real y); /// +float nexttowardf(float x, real y); /// ditto +real nexttowardl(real x, real y); /// ditto + +double fdim(double x, double y); /// +float fdimf(float x, float y); /// ditto +real fdiml(real x, real y); /// ditto + +double fmax(double x, double y); /// +float fmaxf(float x, float y); /// ditto +real fmaxl(real x, real y); /// ditto + +double fmin(double x, double y); /// +float fminf(float x, float y); /// ditto +real fminl(real x, real y); /// ditto + +double fma(double x, double y, double z); /// +float fmaf(float x, float y, float z); /// ditto +real fmal(real x, real y, real z); /// ditto + +/// +int isgreater(real x, real y) { return !(x !> y); } +/// +int isgreaterequal(real x, real y) { return !(x !>= y); } +/// +int isless(real x, real y) { return !(x !< y); } +/// +int islessequal(real x, real y) { return !(x !<= y); } +/// +int islessgreater(real x, real y) { return !(x !<> y); } +/// +int isunordered(real x, real y) { return (x !<>= y); } +