diff --git a/src/sampler.luau b/src/sampler.luau index 56d3a03..d07fbd1 100644 --- a/src/sampler.luau +++ b/src/sampler.luau @@ -380,11 +380,19 @@ local function ANALYZE(sample: Sample, options: AnalyzeOptions?): SampleStats -- Calculate MAD (median absolute deviation) local mad = calculate_mad(sample, median) + -- Calculate mean (Neumaier summation) local sum = 0 + local correction = 0 for _, value in sample do - sum += value + local target = sum + value + + if math.abs(sum) >= math.abs(value) then + correction += (sum - target) + value + else + correction += (value - target) + sum + end end - local mean = sum / n + local mean = (sum + correction) / n -- Calculate variance and standard deviation local variance_sum = 0