commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thomas Neidhart <thomas.neidh...@gmail.com>
Subject Re: svn commit: r1348024 - in /commons/proper/math/trunk/src: main/java/org/apache/commons/math3/stat/inference/MannWhitneyUTest.java test/java/org/apache/commons/math3/stat/inference/MannWhitneyUTestTest.java
Date Tue, 12 Jun 2012 09:10:40 GMT
On Tue, Jun 12, 2012 at 8:13 AM, Mikkel Meyer Andersen <mikl@mikl.dk> wrote:

> 2012/6/12 Thomas Neidhart <thomas.neidhart@gmail.com>:
> > On 06/08/2012 01:04 PM, mikl@apache.org wrote:
> >> Author: mikl
> >> Date: Fri Jun  8 11:04:11 2012
> >> New Revision: 1348024
> >>
> >> URL: http://svn.apache.org/viewvc?rev=1348024&view=rev
> >> Log:
> >> MATH-790: Patch applied to fix the overflow issue.
> >>
> >> Modified:
> >>
> commons/proper/math/trunk/src/main/java/org/apache/commons/math3/stat/inference/MannWhitneyUTest.java
> >>
> commons/proper/math/trunk/src/test/java/org/apache/commons/math3/stat/inference/MannWhitneyUTestTest.java
> >>
> >> Modified:
> commons/proper/math/trunk/src/main/java/org/apache/commons/math3/stat/inference/MannWhitneyUTest.java
> >> URL:
> http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/stat/inference/MannWhitneyUTest.java?rev=1348024&r1=1348023&r2=1348024&view=diff
> >>
> ==============================================================================
> >> ---
> commons/proper/math/trunk/src/main/java/org/apache/commons/math3/stat/inference/MannWhitneyUTest.java
> (original)
> >> +++
> commons/proper/math/trunk/src/main/java/org/apache/commons/math3/stat/inference/MannWhitneyUTest.java
> Fri Jun  8 11:04:11 2012
> >> @@ -170,11 +170,11 @@ public class MannWhitneyUTest {
> >>                                               final int n2)
> >>          throws ConvergenceException, MaxCountExceededException {
> >>
> >> -        final int n1n2prod = n1 * n2;
> >> +        final double n1n2prod = n1 * n2;
> >>
> >>          //
> http://en.wikipedia.org/wiki/Mann%E2%80%93Whitney_U#Normal_approximation
> >> -        final double EU = (double) n1n2prod / 2.0;
> >> -        final double VarU = (double) (n1n2prod * (n1 + n2 + 1)) / 12.0;
> >> +        final double EU = n1n2prod / 2.0;
> >> +        final double VarU = n1n2prod * (n1 + n2 + 1) / 12.0;
> >>
> >>          final double z = (Umin - EU) / FastMath.sqrt(VarU);
> >
> > just a small thing, but wouldn't it be better to do a long
> > multiplication and convert the result to double?
> >
> > Thomas
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > For additional commands, e-mail: dev-help@commons.apache.org
> >
> Do you mean for n1n2prod? Sorry for my ignorance, but what would that
> help? Wouldn't that require more implicit conversions?
>

I just quickly checked to make sure I had the right understanding, but the
line:

>> +        final double n1n2prod = n1 * n2;

still does a int multiplication and may overflow (if n1 and n2 are too big).

Maybe the overflow problem was not in this line but in this one:

>> +        final double VarU = n1n2prod * (n1 + n2 + 1) / 12.0;

so the problem is hidden right now.

Thomas

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message