]> git.llucax.com Git - software/druntime.git/blobdiff - import/stdc/math.d
Applied freebsd stdc changes from Tango.
[software/druntime.git] / import / stdc / math.d
index 3baa33ac02a0d5e2a8dbf6a58d16ea6d128e6efe..3c1881ae4f19197f58993d6fd685314d28cf9c29 100644 (file)
@@ -365,11 +365,11 @@ else version( freebsd )
 {
     enum
     {
-                FP_INFINITE = 0x01,
-                FP_NAN = 0x02,
-                FP_NORMAL = 0x04,
-                FP_SUBNORMAL = 0x08,
-                FP_ZERO = 0x10
+        FP_INFINITE = 0x01,
+        FP_NAN = 0x02,
+        FP_NORMAL = 0x04,
+        FP_SUBNORMAL = 0x08,
+        FP_ZERO = 0x10
     }
 
     enum
@@ -379,43 +379,43 @@ else version( freebsd )
         FP_FAST_FMAL = 0,
     }
 
-        int     __fpclassifyd(double);
-        int     __fpclassifyf(float);
-        int     __fpclassifyl(real);
-        int     __isfinitef(float);
-        int     __isfinite(double);
-        int     __isfinitel(real);
-        int     __isinff(float);
-        int     __isinfl(real);
-        int     __isnanl(real);
-        int     __isnormalf(float);
-        int     __isnormal(double);
-        int     __isnormall(real);
-        int     __signbit(double);
-        int     __signbitf(float);
-        int     __signbitl(real);
+    int __fpclassifyd(double);
+    int __fpclassifyf(float);
+    int __fpclassifyl(real);
+    int __isfinitef(float);
+    int __isfinite(double);
+    int __isfinitel(real);
+    int __isinff(float);
+    int __isinfl(real);
+    int __isnanl(real);
+    int __isnormalf(float);
+    int __isnormal(double);
+    int __isnormall(real);
+    int __signbit(double);
+    int __signbitf(float);
+    int __signbitl(real);
 
   extern (D)
   {
     //int fpclassify(real-floating x);
     int fpclassify(float x)     { return __fpclassifyf(x); }
     int fpclassify(double x)    { return __fpclassifyd(x); }
-        int fpclassify(real x)    { return __fpclassifyl(x); }
+    int fpclassify(real x)    { return __fpclassifyl(x); }
 
     //int isfinite(real-floating x);
     int isfinite(float x)       { return __isfinitef(x); }
     int isfinite(double x)      { return __isfinite(x); }
-        int isfinite(double x)      { return __isfinitel(x); }
+    int isfinite(real x)      { return __isfinitel(x); }
 
     //int isinf(real-floating x);
     int isinf(float x)          { return __isinff(x); }
     int isinf(double x)         { return __isinfl(x); }
-        int isinf(real x)         { return __isinfl(x); }
+    int isinf(real x)         { return __isinfl(x); }
 
     //int isnan(real-floating x);
     int isnan(float x)          { return __isnanl(x); }
     int isnan(double x)         { return __isnanl(x); }
-        int isnan(real x)         { return __isnanl(x); }
+    int isnan(real x)         { return __isnanl(x); }
 
     //int isnormal(real-floating x);
     int isnormal(float x)       { return __isnormalf(x); }
@@ -425,7 +425,7 @@ else version( freebsd )
     //int signbit(real-floating x);
     int signbit(float x)     { return __signbitf(x); }
     int signbit(double x)    { return __signbit(x); }
-        int signbit(double x)    { return __signbit(x); }
+    int signbit(real x)    { return __signbit(x); }
     }
 }
 
@@ -462,230 +462,467 @@ extern (D)
     int isunordered(real x, real y)        { return (x !<>= y); }
 }
 
-double  acos(double x);
-float   acosf(float x);
-real    acosl(real x);
+// NOTE: freebsd < 8-CURRENT doesn't appear to support *l, but we can
+//       approximate.
+version( freebsd )
+{
+    double  acos(double x);
+    float   acosf(float x);
+    real    acosl(real x) { return acos(x); }
+
+    double  asin(double x);
+    float   asinf(float x);
+    real    asinl(real x) { return asin(x); }
+
+    double  atan(double x);
+    float   atanf(float x);
+    real    atanl(real x) { return atan(x); }
+
+    double  atan2(double y, double x);
+    float   atan2f(float y, float x);
+    real    atan2l(real y, real x) { return atan2(y, x); }
+
+    double  cos(double x);
+    float   cosf(float x);
+    real    cosl(real x) { return cos(x); }
+
+    double  sin(double x);
+    float   sinf(float x);
+    real    sinl(real x) { return sin(x); }
+
+    double  tan(double x);
+    float   tanf(float x);
+    real    tanl(real x) { return tan(x); }
+
+    double  acosh(double x);
+    float   acoshf(float x);
+    real    acoshl(real x) { return acosh(x); }
+
+    double  asinh(double x);
+    float   asinhf(float x);
+    real    asinhl(real x) { return asinh(x); }
+
+    double  atanh(double x);
+    float   atanhf(float x);
+    real    atanhl(real x) { return atanh(x); }
+
+    double  cosh(double x);
+    float   coshf(float x);
+    real    coshl(real x) { return cosh(x); }
+
+    double  sinh(double x);
+    float   sinhf(float x);
+    real    sinhl(real x) { return sinh(x); }
+
+    double  tanh(double x);
+    float   tanhf(float x);
+    real    tanhl(real x) { return tanh(x); }
+
+    double  exp(double x);
+    float   expf(float x);
+    real    expl(real x) { return exp(x); }
+
+    double  exp2(double x);
+    float   exp2f(float x);
+    real    exp2l(real x) { return exp2(x); }
+
+    double  expm1(double x);
+    float   expm1f(float x);
+    real    expm1l(real x) { return expm1(x); }
+
+    double  frexp(double value, int* exp);
+    float   frexpf(float value, int* exp);
+    real    frexpl(real value, int* exp) { return frexp(value, exp); }
+
+    int     ilogb(double x);
+    int     ilogbf(float x);
+    int     ilogbl(real x) { return ilogb(x); }
+
+    double  ldexp(double x, int exp);
+    float   ldexpf(float x, int exp);
+    real    ldexpl(real x, int exp) { return ldexp(x, exp); }
+
+    double  log(double x);
+    float   logf(float x);
+    real    logl(real x) { return log(x); }
+
+    double  log10(double x);
+    float   log10f(float x);
+    real    log10l(real x) { return log10(x); }
+
+    double  log1p(double x);
+    float   log1pf(float x);
+    real    log1pl(real x) { return log1p(x); }
+
+    private const real ONE_LN2 = 1 / 0x1.62e42fefa39ef358p-1L;
+    double  log2(double x) { return log(x) * ONE_LN2; }
+    float   log2f(float x) { return logf(x) * ONE_LN2; }
+    real    log2l(real x) { return logl(x) * ONE_LN2; }
+
+    double  logb(double x);
+    float   logbf(float x);
+    real    logbl(real x) { return logb(x); }
+
+    double  modf(double value, double* iptr);
+    float   modff(float value, float* iptr);
+    //real    modfl(real value, real *iptr); // nontrivial conversion
+
+    double  scalbn(double x, int n);
+    float   scalbnf(float x, int n);
+    real    scalbnl(real x, int n) { return scalbn(x, n); }
+
+    double  scalbln(double x, c_long n);
+    float   scalblnf(float x, c_long n);
+    real    scalblnl(real x, c_long n) { return scalbln(x, n); }
+
+
+    double  cbrt(double x);
+    float   cbrtf(float x);
+    real    cbrtl(real x) { return cbrt(x); }
+
+    double  fabs(double x);
+    float   fabsf(float x);
+    real    fabsl(real x) { return fabs(x); }
+
+    double  hypot(double x, double y);
+    float   hypotf(float x, float y);
+    real    hypotl(real x, real y) { return hypot(x, y); }
+
+    double  pow(double x, double y);
+    float   powf(float x, float y);
+    real    powl(real x, real y) { return pow(x, y); }
+
+    double  sqrt(double x);
+    float   sqrtf(float x);
+    real    sqrtl(real x) { return sqrt(x); }
+
+    double  erf(double x);
+    float   erff(float x);
+    real    erfl(real x) { return erf(x); }
+
+    double  erfc(double x);
+    float   erfcf(float x);
+    real    erfcl(real x) { return erfc(x); }
+
+    double  lgamma(double x);
+    float   lgammaf(float x);
+    real    lgammal(real x) { return lgamma(x); }
+
+    double  tgamma(double x);
+    float   tgammaf(float x);
+    real    tgammal(real x) { return tgamma(x); }
+
+    double  ceil(double x);
+    float   ceilf(float x);
+    real    ceill(real x) { return ceil(x); }
+
+    double  floor(double x);
+    float   floorf(float x);
+    real    floorl(real x) { return floor(x); }
+
+    double  nearbyint(double x);
+    float   nearbyintf(float x);
+    real    nearbyintl(real x) { return nearbyint(x); }
+
+    double  rint(double x);
+    float   rintf(float x);
+    real    rintl(real x) { return rint(x); }
+
+    c_long  lrint(double x);
+    c_long  lrintf(float x);
+    c_long  lrintl(real x) { return lrint(x); }
+
+    long    llrint(double x);
+    long    llrintf(float x);
+    long    llrintl(real x) { return llrint(x); }
+
+    double  round(double x);
+    float   roundf(float x);
+    real    roundl(real x) { return round(x); }
+
+    c_long  lround(double x);
+    c_long  lroundf(float x);
+    c_long  lroundl(real x) { return lround(x); }
+
+    long    llround(double x);
+    long    llroundf(float x);
+    long    llroundl(real x) { return llround(x); }
+
+    double  trunc(double x);
+    float   truncf(float x);
+    real    truncl(real x) { return trunc(x); }
+
+    double  fmod(double x, double y);
+    float   fmodf(float x, float y);
+    real    fmodl(real x, real y) { return fmod(x, y); }
+
+    double  remainder(double x, double y);
+    float   remainderf(float x, float y);
+    real    remainderl(real x, real y) { return remainder(x, y); }
+
+    double  remquo(double x, double y, int* quo);
+    float   remquof(float x, float y, int* quo);
+    real    remquol(real x, real y, int* quo) { return remquo(x, y, quo); }
+
+    double  copysign(double x, double y);
+    float   copysignf(float x, float y);
+    real    copysignl(real x, real y) { return copysign(x, y); }
+
+//  double  nan(char* tagp);
+//  float   nanf(char* tagp);
+//  real    nanl(char* tagp);
+
+    double  nextafter(double x, double y);
+    float   nextafterf(float x, float y);
+    real    nextafterl(real x, real y) { return nextafter(x, y); }
+
+    double  nexttoward(double x, real y);
+    float   nexttowardf(float x, real y);
+    real    nexttowardl(real x, real y) { return nexttoward(x, y); }
+
+    double  fdim(double x, double y);
+    float   fdimf(float x, float y);
+    real    fdiml(real x, real y) { return fdim(x, y); }
+
+    double  fmax(double x, double y);
+    float   fmaxf(float x, float y);
+    real    fmaxl(real x, real y) { return fmax(x, y); }
+
+    double  fmin(double x, double y);
+    float   fminf(float x, float y);
+    real    fminl(real x, real y) { return fmin(x, y); }
+
+    double  fma(double x, double y, double z);
+    float   fmaf(float x, float y, float z);
+    real    fmal(real x, real y, real z) { return fma(x, y, z); }
+}
+else
+{
+    double  acos(double x);
+    float   acosf(float x);
+    real    acosl(real x);
 
-double  asin(double x);
-float   asinf(float x);
-real    asinl(real x);
+    double  asin(double x);
+    float   asinf(float x);
+    real    asinl(real x);
 
-double  atan(double x);
-float   atanf(float x);
-real    atanl(real x);
+    double  atan(double x);
+    float   atanf(float x);
+    real    atanl(real x);
 
-double  atan2(double y, double x);
-float   atan2f(float y, float x);
-real    atan2l(real y, real x);
+    double  atan2(double y, double x);
+    float   atan2f(float y, float x);
+    real    atan2l(real y, real x);
 
-double  cos(double x);
-float   cosf(float x);
-real    cosl(real x);
+    double  cos(double x);
+    float   cosf(float x);
+    real    cosl(real x);
 
-double  sin(double x);
-float   sinf(float x);
-real    sinl(real x);
+    double  sin(double x);
+    float   sinf(float x);
+    real    sinl(real x);
 
-double  tan(double x);
-float   tanf(float x);
-real    tanl(real x);
+    double  tan(double x);
+    float   tanf(float x);
+    real    tanl(real x);
 
-double  acosh(double x);
-float   acoshf(float x);
-real    acoshl(real x);
+    double  acosh(double x);
+    float   acoshf(float x);
+    real    acoshl(real x);
 
-double  asinh(double x);
-float   asinhf(float x);
-real    asinhl(real x);
+    double  asinh(double x);
+    float   asinhf(float x);
+    real    asinhl(real x);
 
-double  atanh(double x);
-float   atanhf(float x);
-real    atanhl(real x);
+    double  atanh(double x);
+    float   atanhf(float x);
+    real    atanhl(real x);
 
-double  cosh(double x);
-float   coshf(float x);
-real    coshl(real x);
+    double  cosh(double x);
+    float   coshf(float x);
+    real    coshl(real x);
 
-double  sinh(double x);
-float   sinhf(float x);
-real    sinhl(real x);
+    double  sinh(double x);
+    float   sinhf(float x);
+    real    sinhl(real x);
 
-double  tanh(double x);
-float   tanhf(float x);
-real    tanhl(real x);
+    double  tanh(double x);
+    float   tanhf(float x);
+    real    tanhl(real x);
 
-double  exp(double x);
-float   expf(float x);
-real    expl(real x);
+    double  exp(double x);
+    float   expf(float x);
+    real    expl(real x);
 
-double  exp2(double x);
-float   exp2f(float x);
-real    exp2l(real x);
+    double  exp2(double x);
+    float   exp2f(float x);
+    real    exp2l(real x);
 
-double  expm1(double x);
-float   expm1f(float x);
-real    expm1l(real x);
+    double  expm1(double x);
+    float   expm1f(float x);
+    real    expm1l(real x);
 
-double  frexp(double value, int* exp);
-float   frexpf(float value, int* exp);
-real    frexpl(real value, int* exp);
+    double  frexp(double value, int* exp);
+    float   frexpf(float value, int* exp);
+    real    frexpl(real value, int* exp);
 
-int     ilogb(double x);
-int     ilogbf(float x);
-int     ilogbl(real x);
+    int     ilogb(double x);
+    int     ilogbf(float x);
+    int     ilogbl(real x);
 
-double  ldexp(double x, int exp);
-float   ldexpf(float x, int exp);
-real    ldexpl(real x, int exp);
+    double  ldexp(double x, int exp);
+    float   ldexpf(float x, int exp);
+    real    ldexpl(real x, int exp);
 
-double  log(double x);
-float   logf(float x);
-real    logl(real x);
+    double  log(double x);
+    float   logf(float x);
+    real    logl(real x);
 
-double  log10(double x);
-float   log10f(float x);
-real    log10l(real x);
+    double  log10(double x);
+    float   log10f(float x);
+    real    log10l(real x);
 
-double  log1p(double x);
-float   log1pf(float x);
-real    log1pl(real x);
+    double  log1p(double x);
+    float   log1pf(float x);
+    real    log1pl(real x);
 
-double  log2(double x);
-float   log2f(float x);
-real    log2l(real x);
+    double  log2(double x);
+    float   log2f(float x);
+    real    log2l(real x);
 
-double  logb(double x);
-float   logbf(float x);
-real    logbl(real x);
+    double  logb(double x);
+    float   logbf(float x);
+    real    logbl(real x);
 
-double  modf(double value, double* iptr);
-float   modff(float value, float* iptr);
-real    modfl(real value, real *iptr);
+    double  modf(double value, double* iptr);
+    float   modff(float value, float* iptr);
+    real    modfl(real value, real *iptr);
 
-double  scalbn(double x, int n);
-float   scalbnf(float x, int n);
-real    scalbnl(real x, int n);
+    double  scalbn(double x, int n);
+    float   scalbnf(float x, int n);
+    real    scalbnl(real x, int n);
 
-double  scalbln(double x, c_long n);
-float   scalblnf(float x, c_long n);
-real    scalblnl(real x, c_long n);
+    double  scalbln(double x, c_long n);
+    float   scalblnf(float x, c_long n);
+    real    scalblnl(real x, c_long n);
 
-double  cbrt(double x);
-float   cbrtf(float x);
-real    cbrtl(real x);
+    double  cbrt(double x);
+    float   cbrtf(float x);
+    real    cbrtl(real x);
 
-double  fabs(double x);
-float   fabsf(float x);
-real    fabsl(real x);
+    double  fabs(double x);
+    float   fabsf(float x);
+    real    fabsl(real x);
 
-double  hypot(double x, double y);
-float   hypotf(float x, float y);
-real    hypotl(real x, real y);
+    double  hypot(double x, double y);
+    float   hypotf(float x, float y);
+    real    hypotl(real x, real y);
 
-double  pow(double x, double y);
-float   powf(float x, float y);
-real    powl(real x, real y);
+    double  pow(double x, double y);
+    float   powf(float x, float y);
+    real    powl(real x, real y);
 
-double  sqrt(double x);
-float   sqrtf(float x);
-real    sqrtl(real x);
+    double  sqrt(double x);
+    float   sqrtf(float x);
+    real    sqrtl(real x);
 
-double  erf(double x);
-float   erff(float x);
-real    erfl(real x);
+    double  erf(double x);
+    float   erff(float x);
+    real    erfl(real x);
 
-double  erfc(double x);
-float   erfcf(float x);
-real    erfcl(real x);
+    double  erfc(double x);
+    float   erfcf(float x);
+    real    erfcl(real x);
 
-double  lgamma(double x);
-float   lgammaf(float x);
-real    lgammal(real x);
+    double  lgamma(double x);
+    float   lgammaf(float x);
+    real    lgammal(real x);
 
-double  tgamma(double x);
-float   tgammaf(float x);
-real    tgammal(real x);
+    double  tgamma(double x);
+    float   tgammaf(float x);
+    real    tgammal(real x);
 
-double  ceil(double x);
-float   ceilf(float x);
-real    ceill(real x);
+    double  ceil(double x);
+    float   ceilf(float x);
+    real    ceill(real x);
 
-double  floor(double x);
-float   floorf(float x);
-real    floorl(real x);
+    double  floor(double x);
+    float   floorf(float x);
+    real    floorl(real x);
 
-double  nearbyint(double x);
-float   nearbyintf(float x);
-real    nearbyintl(real x);
+    double  nearbyint(double x);
+    float   nearbyintf(float x);
+    real    nearbyintl(real x);
 
-double  rint(double x);
-float   rintf(float x);
-real    rintl(real x);
+    double  rint(double x);
+    float   rintf(float x);
+    real    rintl(real x);
 
-c_long  lrint(double x);
-c_long  lrintf(float x);
-c_long  lrintl(real x);
+    c_long  lrint(double x);
+    c_long  lrintf(float x);
+    c_long  lrintl(real x);
 
-long    llrint(double x);
-long    llrintf(float x);
-long    llrintl(real x);
+    long    llrint(double x);
+    long    llrintf(float x);
+    long    llrintl(real x);
 
-double  round(double x);
-float   roundf(float x);
-real    roundl(real x);
+    double  round(double x);
+    float   roundf(float x);
+    real    roundl(real x);
 
-c_long  lround(double x);
-c_long  lroundf(float x);
-c_long  lroundl(real x);
+    c_long  lround(double x);
+    c_long  lroundf(float x);
+    c_long  lroundl(real x);
 
-long    llround(double x);
-long    llroundf(float x);
-long    llroundl(real x);
+    long    llround(double x);
+    long    llroundf(float x);
+    long    llroundl(real x);
 
-double  trunc(double x);
-float   truncf(float x);
-real    truncl(real x);
+    double  trunc(double x);
+    float   truncf(float x);
+    real    truncl(real x);
 
-double  fmod(double x, double y);
-float   fmodf(float x, float y);
-real    fmodl(real x, real y);
+    double  fmod(double x, double y);
+    float   fmodf(float x, float y);
+    real    fmodl(real x, real y);
 
-double  remainder(double x, double y);
-float   remainderf(float x, float y);
-real    remainderl(real x, real y);
+    double  remainder(double x, double y);
+    float   remainderf(float x, float y);
+    real    remainderl(real x, real y);
 
-double  remquo(double x, double y, int* quo);
-float   remquof(float x, float y, int* quo);
-real    remquol(real x, real y, int* quo);
+    double  remquo(double x, double y, int* quo);
+    float   remquof(float x, float y, int* quo);
+    real    remquol(real x, real y, int* quo);
 
-double  copysign(double x, double y);
-float   copysignf(float x, float y);
-real    copysignl(real x, real y);
+    double  copysign(double x, double y);
+    float   copysignf(float x, float y);
+    real    copysignl(real x, real y);
 
-double  nan(in char* tagp);
-float   nanf(in char* tagp);
-real    nanl(in char* tagp);
+    double  nan(char* tagp);
+    float   nanf(char* tagp);
+    real    nanl(char* tagp);
 
-double  nextafter(double x, double y);
-float   nextafterf(float x, float y);
-real    nextafterl(real x, real y);
+    double  nextafter(double x, double y);
+    float   nextafterf(float x, float y);
+    real    nextafterl(real x, real y);
 
-double  nexttoward(double x, real y);
-float   nexttowardf(float x, real y);
-real    nexttowardl(real x, real y);
+    double  nexttoward(double x, real y);
+    float   nexttowardf(float x, real y);
+    real    nexttowardl(real x, real y);
 
-double  fdim(double x, double y);
-float   fdimf(float x, float y);
-real    fdiml(real x, real y);
+    double  fdim(double x, double y);
+    float   fdimf(float x, float y);
+    real    fdiml(real x, real y);
 
-double  fmax(double x, double y);
-float   fmaxf(float x, float y);
-real    fmaxl(real x, real y);
+    double  fmax(double x, double y);
+    float   fmaxf(float x, float y);
+    real    fmaxl(real x, real y);
 
-double  fmin(double x, double y);
-float   fminf(float x, float y);
-real    fminl(real x, real y);
+    double  fmin(double x, double y);
+    float   fminf(float x, float y);
+    real    fminl(real x, real y);
 
-double  fma(double x, double y, double z);
-float   fmaf(float x, float y, float z);
-real    fmal(real x, real y, real z);
+    double  fma(double x, double y, double z);
+    float   fmaf(float x, float y, float z);
+    real    fmal(real x, real y, real z);
+}
\ No newline at end of file