Add mathext.Min / mathext.Max

This commit is contained in:
2022-10-27 17:03:30 +02:00
parent 3717eeb515
commit c9e459edac
3 changed files with 56 additions and 8 deletions

View File

@@ -1,26 +1,28 @@
package mathext
func Sum(v []float64) float64 {
total := float64(0)
import "gogs.mikescher.com/BlackForestBytes/goext/langext"
func Sum[T langext.NumberConstraint](v []T) T {
total := T(0)
for _, v := range v {
total += v
}
return total
}
func Mean(v []float64) float64 {
return Sum(v) / float64(len(v))
func Mean[T langext.FloatConstraint](v []T) T {
return Sum(v) / T(len(v))
}
func Median(v []float64) float64 {
func Median[T langext.FloatConstraint](v []T) T {
if len(v)%2 == 1 {
return v[len(v)/2]
} else {
return (v[len(v)/2-1] + v[len(v)/2]) / float64(2)
return (v[len(v)/2-1] + v[len(v)/2]) / T(2)
}
}
func Min(v []float64) float64 {
func ArrMin[T langext.OrderedConstraint](v []T) T {
r := v[0]
for _, val := range v {
if val < r {
@@ -30,7 +32,7 @@ func Min(v []float64) float64 {
return r
}
func Max(v []float64) float64 {
func ArrMax[T langext.OrderedConstraint](v []T) T {
r := v[0]
for _, val := range v {
if val > r {