commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gilles <gil...@harfang.homelinux.org>
Subject Re: [NUMBERS] Proposal for refactoring and extension of Gamma functions.
Date Mon, 05 Jun 2017 22:01:46 GMT
On Tue, 6 Jun 2017 01:14:38 +0530, Amey Jadiye wrote:
> Hi All,
>
> Coming from discussion happened here
> https://issues.apache.org/jira/browse/NUMBERS-38
>
> As Gamma is nothing but advanced factorial function gamma(n)=(n-1)! 
> with
> advantages like we can have factorial of whole numbers as well as
> factional. Now as [Gamma functions (
> https://en.wikipedia.org/wiki/Gamma_function ) which is having 
> general
> formula {{Gamma( x ) = integral( t^(x-1) e^(-t), t = 0 .. infinity)}} 
> is a
> plane old base function however Lanczos approximation / Stirling's
> approximation /Spouge's Approximation  *is a* gamma function so they 
> should
> be extend Gamma.
>
> Exact algorithm and formulas here :
>  - Lanczo's Approximation -
> https://en.wikipedia.org/wiki/Lanczos_approximation
>  - Stirling's Approximation  -
> https://en.wikipedia.org/wiki/Stirling%27s_approximation
>  - Spouge's Approximation -
> https://en.wikipedia.org/wiki/Spouge%27s_approximation
>
> Why to refactor code is because basic gamma function computes not so
> accurate/precision values so someone who need quick computation 
> without
> precision can choose it, while someone who need precision overs cost 
> of
> performance (Lanczos approximation is accurate so its slow takes more 
> cpu
> cycle) can choose which algorithm they want.
>
> for some scientific application all values should be computed with 
> great
> precision, with out Gamma class no choice is given for choosing which
> algorithm user want.
>
> I'm proposing to create something like:
>
> Gamma gammaFun = new Gamma(); gammaFun.value( x );
> Gamma gammaFun = new LanczosGamma(); gammaFun.value( x );
> Gamma gammaFun = new StirlingsGamma(); gammaFun.value( x );
> Gamma gammaFun = new SpougesGamma(); gammaFun.value( x );
>
> Also as the class name suggestion {{LanczosApproximation}} it should
> execute/implement full *Lanczos Algoritham* but we are just computing
> coefficients in that class which is incorrect, so just refactoring is
> needed which wont break any dependency of this class anywhere. (will 
> modify
> code such way).
>
> let me know your thoughts?
>

I've added a comment (about the multiple implementations) on the
JIRA page.

I agree that if the class currently named "LanczosApproximation" is
not what the references define as "Lanczos' approximation", it should
be renamed.
My preference would be to "hide" it inside the "Gamma" class, if we
can sort out how to modify the "GammaDistribution" class (in Commons
Math) accordingly.

Regards,
Gilles


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message