private static double correct(bool unbiased, WeightType weightType, double sum, double weightSum, double squareSum)
{
if (unbiased)
{
if (weightType == WeightType.Automatic)
{
if (weightSum > 1 && weightSum.IsInteger(1e-8))
return sum / (weightSum - 1);
return sum / (weightSum - (squareSum / weightSum));
}
else if (weightType == WeightType.Fraction)
{
/*
if (Math.Abs(weightSum - 1.0) >= 1e-8)
{
throw new ArgumentException("An unbiased variance estimate"
+ " cannot be computed if weights do not sum to one. The"
+ " given weights sum up to " + squareSum, "weights");
}*/
return sum / (weightSum - (squareSum / weightSum));
}
else if (weightType == WeightType.Repetition)
{
return sum / (weightSum - (squareSum / weightSum));
}
}
return sum / weightSum;
}
}