<br><br><div class="gmail_quote">On Wed, Nov 17, 2010 at 4:09 PM, Don Clugston <span dir="ltr"><<a href="mailto:dclugston@googlemail.com">dclugston@googlemail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
I have a pile of functions I wrote for Tango, most of which are part<br>
of C99. I'd like to move them into Phobos. In the process, I'd like to<br>
clean up a few things in std.math.<br>
<br>
The main idea is that a new module, std.mathspecial, will contain<br>
mathematical Special Functions. In the long term, there could be quite<br>
a large number of these, but I think it will still be OK to have all<br>
of them declared in a single module.<br>
The implementations of these functions will mostly reside in<br>
std.internal.math.XXX. In many cases, the implementations are quite<br>
large.<br>
<br>
std.math will be restricted to low-level operations and "high school"<br>
mathematics.<br></blockquote><div><br>Vote++.  I think Phobos could use more math stuff.<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<br>
(1) Add two necessary functions to std.math:<br>
<br>
// Rounds x to the nearest int or long using the currently selected<br>
rounding mode<br>
// (MUCH faster than cast(int)).<br></blockquote><div><br>Why isn't this the default, i.e. why doesn't cast(int) do this? <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

int rndint(real x)<br>
long rndlong(real x)<br>
<br>
(2) Delete etc.gamma<br></blockquote><div><br>Good, didn't know it was there. <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<br>
(3) Create a new module std.mathspecial.<br>
<br>
Move the following functions from std.math into std.mathspecial:<br>
erf()<br>
erfc()<br>
lgamma() -----> name changes to logGamma(real x)<br>
tgamma() ---> name changes to gamma(real x).<br>
BTW The 't' in the C name exists for extremely silly historical reasons.<br>
<br>
std.math will retain alias for these functions, before they are<br>
eventually deprecated.<br>
<br>
(4) Add implementations of those functions into std.internal.math.gammafunction<br>
Also add:<br>
real sgnGamma(real x);    // the sign of gamma(x), always used with logGamma.<br>
real digamma(x);   //  The digamma function<br>
real beta(real x, real y);    // the beta function<br>
<br>
I'm not sure about the naming for the other functions. I will leave<br>
that for a later discussion.<br>
They include:<br>
* Distribution functions for the normal, F, chi-square, students-T, gamma, beta,<br>
poisson, binomial, and negative binomial distributions.<br></blockquote><div><br>Vote++.  I'm sick of maintaining the D2 ports of this stuff myself for dstats.  It also makes the licensing status of dstats slightly screwy since I initially got them from Tango.  (I was smart enough, though, to clearly mark the tainted parts for future removal.)<br>
 <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
* Cylindrical Bessel functions<br>
real cylBessel_j0(real x)  real cylBessel_y0(real x)<br>
real cylBessel_j1(real x)  real cylBessel_y1(real x)<br>
real cylBessel_jn(int n, real x )  real cylBessel_yn(int n, real x)<br></blockquote><div><br>I've got no clue what these even are, but given that they're just math functions that are orthogonal to the rest of the standard library, I don't see any harm in adding them.<br>
</div></div>