[ 
https://issues.apache.org/jira/browse/MATH-1228?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14742433#comment-14742433
 ] 

Gilles commented on MATH-1228:
------------------------------

bq. this effectively means that the public constructor Mean(FirstMoment) is not 
usable. 

I'd tend to agree that this looks like an internal inconsistency.

However, if {{FirstMoment}} was intended as an internal support class, while 
{{Mean}} would be the corresponding public API, it is not good to just make 
{{FirstMoment}} public, as this would create a redundancy in the library.

I think that the performance problem would be alleviated significantly if the 
field "incMoment" would be *final*.
Currently, the method {{copy(Mean,Mean)}} prevents such a change.
IMHO it should be fixed by removing that method, as it is itself redundant with 
the copy constructor {{Mean(Mean)}}.

If I'm not mistaken, the code is from a time when using "new" was to be 
avoided, leading to many such "manual" optimizations, that nowadays prove 
harmful.

I'd suggest that your raise the issue on the "dev" ML (as it concerns a design 
decision, rather than a bug fix).

> First Moment is not public
> --------------------------
>
>                 Key: MATH-1228
>                 URL: https://issues.apache.org/jira/browse/MATH-1228
>             Project: Commons Math
>          Issue Type: Bug
>    Affects Versions: 3.5
>            Reporter: Fabian Lange
>
> Hi there,
> is there a specific reason FirstMoment is not public?
> I want to calculate a mean over a List<Double>, for that I want to loop over 
> that list and invoke Mean.increment(listValue), however this is slower than 
> it could be. Every increment call makes a check to incMoment.
> I could avoid that if I use a FirstMoment directly, but I cannot create an 
> instance, because it is protected.
> Also this effectively means that the public constructor Mean(FirstMoment) is 
> not usable.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to