github.com/Anderson-Lu/gobox@v0.0.0-20191127065433-3e6c4c2da420/number/variance.go (about) 1 package number 2 3 import "math" 4 5 type Variance interface { 6 Len() int 7 Get(i int) float64 8 } 9 type Avg Variance 10 11 //计算方差 12 func CalcVariance(data Variance) float64 { 13 n := data.Len() 14 if n == 0 { 15 return 0.0 16 } 17 avg := CalcAverage(data.(Avg)) 18 sum := 0.0 19 for i := 0; i < n; i++ { 20 sum += math.Pow((data.Get(i) - avg), 2) 21 } 22 return sum / float64(n) 23 } 24 25 //计算平均数 26 func CalcAverage(data Avg) float64 { 27 n := data.Len() 28 if n == 0 { 29 return 0.0 30 } 31 x := 0.0 32 for i := 0; i < n; i++ { 33 x += data.Get(i) 34 } 35 return x / float64(n) 36 }