phobos/std/c/math.d
Andrei Alexandrescu 1ae5300f52 * std.algorithm: Changed the map() function so that it deduces the return type
* std.contracts: Added file and line information to enforce. Added errnoEnforce that reads and formats a message according to errno. Added corresponding ErrnoException class.

* std.encoding: For now commented out std.encoding.to. 

* std.file: Fixed bug 2065

* std.format: Fixed bug in raw write for arrays

* std.getopt: Added new option stopOnFirstNonOption. Also automatically expand dubious option groups with embedded in them (useful for shebang scripts)

* std.math: improved integral powers

* std.md5: Improved signature of sum so it takes multiple arrays. Added getDigestString.

* std.path: changed signatures of test functions from bool to int. Implemented rel2abs for Windows. Improved join so that it accepts multiple paths. Got rid of some gotos with the help of scope statements.

* std.process: added getenv and setenv. Improved system() so it returns the exit code correctly on Linux.

* std.random: added the dice function - a handy (possibly biased) dice.

* std.file: added support for opening large files (not yet tested)

* std.utf: added the codeLength function. Got rid of some gotos.
2008-05-06 05:08:52 +00:00

291 lines
7.2 KiB
D

/**
* 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(in char *tagp); ///
float nanf(in char *tagp); /// ditto
real nanl(in 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); }