From 7dd6097d42d6d6f254a84ab0111bac70f0358660 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期二, 30 四月 2024 10:20:40 +0800 Subject: [PATCH] 加一些注释 --- utils/mathx.go | 36 +++++++++++++++++++++++++++++++++++- 1 files changed, 35 insertions(+), 1 deletions(-) diff --git a/utils/mathx.go b/utils/mathx.go index 3bbf646..f43ead9 100644 --- a/utils/mathx.go +++ b/utils/mathx.go @@ -1,7 +1,11 @@ package utils -import "github.com/shopspring/decimal" +import ( + "github.com/shopspring/decimal" + "sort" +) +// Average 鍙栧钩鍧囧�� func Average(numbers []decimal.Decimal) decimal.Decimal { if len(numbers) == 0 { return decimal.Decimal{} @@ -16,6 +20,7 @@ return sum.Div(decimal.NewFromInt(int64(len(numbers)))) } +// Deviation 鍋忓樊 func Deviation(numbers []decimal.Decimal) decimal.Decimal { if len(numbers) == 0 || len(numbers) == 1 { return decimal.Decimal{} @@ -28,3 +33,32 @@ } return diffSquaredSum.Div(decimal.NewFromInt(int64(len(numbers)))) } + +// TotalDeviation 鎬诲樊 +func TotalDeviation(numbers []decimal.Decimal, average decimal.Decimal) decimal.Decimal { + if len(numbers) < 2 { + return decimal.Zero + } + + n := len(numbers) + ratio := decimal.NewFromFloat(0.02) + length := decimal.NewFromInt(int64(n)).Mul(ratio).Ceil().IntPart() + if length >= int64(n) { + return decimal.Zero + } + + sort.Slice(numbers, func(i, j int) bool { + return numbers[i].LessThan(numbers[j]) + }) + + minPart := numbers[:length-1] + maxPart := numbers[length:] + + minAverage := Average(minPart) + maxAverage := Average(maxPart) + + minDiff := minAverage.Sub(average).Abs() + maxDiff := maxAverage.Sub(average).Abs() + + return decimal.Max(minDiff, maxDiff) +} -- Gitblit v1.8.0