[phobos] Proposed changes to std.math + introduce std.mathspecial

Don Clugston dclugston at googlemail.com
Wed Nov 17 13:09:10 PST 2010


I have a pile of functions I wrote for Tango, most of which are part
of C99. I'd like to move them into Phobos. In the process, I'd like to
clean up a few things in std.math.

The main idea is that a new module, std.mathspecial, will contain
mathematical Special Functions. In the long term, there could be quite
a large number of these, but I think it will still be OK to have all
of them declared in a single module.
The implementations of these functions will mostly reside in
std.internal.math.XXX. In many cases, the implementations are quite
large.

std.math will be restricted to low-level operations and "high school"
mathematics.

(1) Add two necessary functions to std.math:

// Rounds x to the nearest int or long using the currently selected
rounding mode
// (MUCH faster than cast(int)).
int rndint(real x)
long rndlong(real x)

(2) Delete etc.gamma

(3) Create a new module std.mathspecial.

Move the following functions from std.math into std.mathspecial:
erf()
erfc()
lgamma() -----> name changes to logGamma(real x)
tgamma() ---> name changes to gamma(real x).
BTW The 't' in the C name exists for extremely silly historical reasons.

std.math will retain alias for these functions, before they are
eventually deprecated.

(4) Add implementations of those functions into std.internal.math.gammafunction
Also add:
real sgnGamma(real x);    // the sign of gamma(x), always used with logGamma.
real digamma(x);   //  The digamma function
real beta(real x, real y);    // the beta function

I'm not sure about the naming for the other functions. I will leave
that for a later discussion.
They include:
* Distribution functions for the normal, F, chi-square, students-T, gamma, beta,
poisson, binomial, and negative binomial distributions.
* Cylindrical Bessel functions
real cylBessel_j0(real x)  real cylBessel_y0(real x)
real cylBessel_j1(real x)  real cylBessel_y1(real x)
real cylBessel_jn(int n, real x )  real cylBessel_yn(int n, real x)


More information about the phobos mailing list