package maths // Abs gets the absolute value of an int func Abs(x int) int { if x < 0 { return -x } return x } // Pmod is a mositive modulo // golang's % is a "remainder" function si misbehaves for negative modulus inputs func Pmod(x, d int) int { if x == 0 || d == 0 { return 0 } x = x % d if x >= 0 { return x } else if d < 0 { return x - d } else { return x + d } } // Max returns the highest int func Max(x, y int) int { if x < y { return y } return x } // Min returns the lowest int func Min(x, y int) int { if x > y { return y } return x } // RoundUp rounds a value up to the nearest multiple func RoundUp(toRound int, multiple int) int { remainder := Pmod(toRound, multiple) if remainder == 0 { return toRound } return (multiple - remainder) + toRound } // RoundDown rounds a value down to the nearest multiple func RoundDown(toRound int, multiple int) int { remainder := Pmod(toRound, multiple) return toRound - remainder }