Others have suggested this in the past. There are/were a few major
things holding it up:
1. While I feel that dstats.summary has about the right level of
complexity/engineering for a third-party statistics lib, I'm a
little worried that it's overengineered for a standard library
module.
2. The brokenness of alias this. I designed the hierarchy of
different summary-calculating output ranges to rely heavily on alias
this. The relevant bugs may have been fixed recently, in 2.050.
I'll have to check.
3. A bunch of stuff uses TempAlloc for its temporary scratch
space. I'd like to keep it that way for efficiency, but it's hard
to put TempAlloc into Phobos given that the issue of GC scanning still
isn't solved.
One solution to these problems is to just move the more basic stuff
over to Phobos and publicly import it from dstats.summary.
On 11/18/2010 8:00 AM, SHOO wrote:
BTW, I
want statistical functions in Phobos. For example, dstats.summary
looks good. Is there the plan to introduce such functions?
--
SHOO
(2010/11/18 6:09), Don Clugston wrote:
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)
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos
|
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos