Browse Source

BUG: Fix bug in ArrayStatistics.Variance on arrays longer than 46341 entries #137

pull/163/head
Christoph Ruegg 13 years ago
parent
commit
6904c6c812
  1. 4
      src/Numerics/Statistics/ArrayStatistics.cs
  2. 10
      src/UnitTests/StatisticsTests/StatisticsTests.cs

4
src/Numerics/Statistics/ArrayStatistics.cs

@ -123,7 +123,7 @@ namespace MathNet.Numerics.Statistics
{
t += samples[i];
double diff = ((i + 1)*samples[i]) - t;
variance += (diff*diff)/((i + 1)*i);
variance += (diff*diff)/((i + 1.0)*i);
}
return variance/(samples.Length - 1);
}
@ -145,7 +145,7 @@ namespace MathNet.Numerics.Statistics
{
t += population[i];
double diff = ((i + 1)*population[i]) - t;
variance += (diff*diff)/((i + 1)*i);
variance += (diff*diff)/((i + 1.0)*i);
}
return variance/population.Length;
}

10
src/UnitTests/StatisticsTests/StatisticsTests.cs

@ -712,5 +712,15 @@ namespace MathNet.Numerics.UnitTests.StatisticsTests
Array.Sort(array);
Assert.AreEqual(1.0, SortedArrayStatistics.Median(array));
}
[Test]
public void VarianceDenominatorMustNotOverflow_GitHubIssue137()
{
var a = new double[46342];
a[a.Length - 1] = 1000d;
Assert.AreEqual(21.578697, a.Variance(), 1e-5);
Assert.AreEqual(21.578231, a.PopulationVariance(), 1e-5);
}
}
}

Loading…
Cancel
Save