We need to get test cases committed for StatUtils before adding/modififying
anything else.  I am OK with what has been a added; but we need to comply with
our stated guidelines, which require test cases for all committed code. 
StatUtils needs its own test cases. 

--- [EMAIL PROTECTED] wrote:
> mdiggory    2003/06/17 20:01:28
> 
>   Modified:    math/src/java/org/apache/commons/math/stat StatUtils.java
>   Log:
>   Adding corrected two-pass algorithm for variance calculation.
>   
>   Revision  Changes    Path
>   1.5       +11 -2    
>
jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/StatUtils.java
>   
>   Index: StatUtils.java
>   ===================================================================
>   RCS file:
>
/home/cvs/jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/StatUtils.java,v
>   retrieving revision 1.4
>   retrieving revision 1.5
>   diff -u -r1.4 -r1.5
>   --- StatUtils.java  18 Jun 2003 01:56:03 -0000      1.4
>   +++ StatUtils.java  18 Jun 2003 03:01:28 -0000      1.5
>   @@ -155,7 +155,14 @@
>        }
>        
>       /**
>   -     * Returns the variance of the available values.
>   +     * Returns the variance of the available values. This uses a corrected
>   +     * two pass algorithm of the following 
>   +     * <a href="http://lib-www.lanl.gov/numerical/bookcpdf/c14-1.pdf";>
>   +     * corrected two pass formula (14.1.8)</a>, and also referenced
> in:<p/>
>   +     * "Algorithms for Computing the Sample Variance: Analysis and
>   +     * Recommendations", Chan, T.F., Golub, G.H., and LeVeque, R.J. 
>   +     * 1983, American Statistician, vol. 37, pp. 242?247.
>   +     * 
>         * @param values Is a double[] containing the values
>         * @return the result, Double.NaN if no values for an empty array 
>         * or 0.0 for a single value set.  
>   @@ -168,10 +175,12 @@
>               } else if (values.length > 1) {
>                       double mean = mean(values);
>                       double accum = 0.0;
>   +            double accum2 = 0.0;
>                       for (int i = 0; i < values.length; i++) {
>                               accum += Math.pow((values[i] - mean), 2.0);
>   +                accum2 += (values[i] - mean);
>                       }
>   -                   variance = accum / (double)(values.length - 1);
>   +                   variance = (accum - 
> (Math.pow(accum2,2)/(double)values.length)) /
> (double)(values.length - 1);
>               }
>               return variance;
>       }
>   
>   
>   
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to