package gmath

import (
	"math"
)

func Pow[N Number](x, y N) N {
	return N(math.Pow(float64(x), float64(y)))
}

func Abs[N Number](v N) N {
	return N(math.Abs(float64(v)))
}

func Mod[N Number](a, b N) N {
	return N(math.Mod(float64(a), float64(b)))
}

func ModPositive[N Number](a, b N) N {
	m := Mod(a, b)
	if m >= 0 {
		return m
	}
	return m + b
}