gitee.com/quant1x/num@v0.3.2/minimum.go (about) 1 package num 2 3 import ( 4 "gitee.com/quant1x/num/x32" 5 "gitee.com/quant1x/num/x64" 6 "slices" 7 ) 8 9 // Minimum AVX2版本, 两个序列横向比较最大值 10 func Minimum[T Number](f1, f2 []T) []T { 11 xlen := len(f1) 12 ylen := len(f2) 13 14 // 第找出最大长度 15 maxLength := xlen 16 if maxLength < ylen { 17 maxLength = ylen 18 } 19 20 // 处理默认值 21 defaultValue := TypeDefault[T]() 22 // 对齐所有长度 23 if xlen < maxLength { 24 f1 = Align(f1, T(defaultValue), maxLength) 25 } 26 if ylen < maxLength { 27 f2 = Align(f2, T(defaultValue), maxLength) 28 } 29 // 初始化返回值 30 var s1, s2 any 31 s1 = f1 32 s2 = f2 33 34 var d any 35 switch fs1 := s1.(type) { 36 case []float32: 37 d = x32.Minimum(fs1, s2.([]float32)) 38 case []float64: 39 d = x64.Minimum(fs1, s2.([]float64)) 40 default: 41 // 目前暂时走不到这里 42 f1 = slices.Clone(f1) 43 __go_minimum(f1, f2) 44 d = f1 45 } 46 return d.([]T) 47 } 48 49 func __go_minimum[T Number](x, y []T) { 50 for i := 0; i < len(x); i++ { 51 if y[i] < x[i] { 52 x[i] = y[i] 53 } 54 } 55 }