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