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); }
+