KoboldSim/koboldsim/util.go
2024-09-27 21:56:13 -07:00

37 lines
781 B
Go

package koboldsim
import (
"math"
"golang.org/x/exp/constraints"
)
// Generic helper functions not directly attached to Card Sim Engine mechanics.
// Mean calculates the mathematical mean of its arguments (the sum, divided
// by the number of elements). If it is called with no arguments, it returns
// NaN ("not a number"). If there are contradictory infinities among the
// arguments, it also returns NaN. Overflowing or underflowing can create an
// infinity.
func Mean(vals ...float64) float64 {
if len(vals) == 0 {
return math.NaN()
}
total := 0.0
for _, x := range vals {
total += x
}
return total / float64(len(vals))
}
func clamp[T constraints.Ordered](val, low, high T) T {
if val < low {
return low
}
if val > high {
return high
}
return val
}