commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas Neidhart (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (MATH-1205) AbstractStorelessUnivariateStatistic should not extend AbstractUnivariateStatistic
Date Sat, 21 Feb 2015 22:46:11 GMT

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

Thomas Neidhart commented on MATH-1205:
---------------------------------------

I am working on  a patch, but there are at least two other odd things that I have seen wrt
storeless statistics:

a) default implementation of equals / hashCode that compares solely on getResult() and getN():
I fail to see a use-case for this and it means that two different types of storeless statistics
are considered to be equal if their current state is equal:

{code}
Mean m = new Mean();
Variance v = new Variance();        
System.out.println(m.equals(v)); // outputs true
{code}

I find this very strange, especially as a default.

b) evaluate(double[], ...): the default implementation in AbstractStorelessUnivariateStatistic
does the following:

 * clear the internal result
 * call increment for all input values in the array
 * return the result

thus the method alters the internal state, which is different for non-storeless statistics.
Some storeless statistics override this method, e.g. Mean to do something else: calculate
the result using an intermediate object and then return the result without altering state.
This is quite confusing imho.

> AbstractStorelessUnivariateStatistic should not extend AbstractUnivariateStatistic
> ----------------------------------------------------------------------------------
>
>                 Key: MATH-1205
>                 URL: https://issues.apache.org/jira/browse/MATH-1205
>             Project: Commons Math
>          Issue Type: Bug
>    Affects Versions: 3.4.1
>            Reporter: Thomas Neidhart
>
> For a storeless statistic it is wrong to extend AbstractUnivariateStatistic as various
fields and methods are inherited that do not make sense in case of a storeless statistic.
> This means a user can accidentially use a storeless statistic in a wrong way:
> {code}
>         Mean mean = new Mean();
>         
>         mean.increment(1);
>         mean.increment(2);
>         
>         mean.setData(new double[] { 1, 2, 3});
>         
>         System.out.println(mean.getResult());
>         System.out.println(mean.evaluate());
> {code}
> will output
> {noformat}
> 1.5
> 2.0
> {noformat}



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

Mime
View raw message