1
0

imath.go 815 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package imath
  2. import "math"
  3. func MinNonZero(a, b int) int {
  4. switch {
  5. case a == 0:
  6. return b
  7. case b == 0:
  8. return a
  9. }
  10. return min(a, b)
  11. }
  12. func Round(a float64) int {
  13. return int(math.Round(a))
  14. }
  15. func RoundToEven(a float64) int {
  16. return int(math.RoundToEven(a))
  17. }
  18. func Scale(a int, scale float64) int {
  19. if a == 0 {
  20. return 0
  21. }
  22. return Round(float64(a) * scale)
  23. }
  24. func ScaleToEven(a int, scale float64) int {
  25. if a == 0 {
  26. return 0
  27. }
  28. return RoundToEven(float64(a) * scale)
  29. }
  30. func Shrink(a int, shrink float64) int {
  31. if a == 0 {
  32. return 0
  33. }
  34. return Round(float64(a) / shrink)
  35. }
  36. func ShrinkToEven(a int, shrink float64) int {
  37. if a == 0 {
  38. return 0
  39. }
  40. return RoundToEven(float64(a) / shrink)
  41. }
  42. func NonZero[T ~int | ~float32 | ~float64](a, b T) T {
  43. if a != 0 {
  44. return a
  45. }
  46. return b
  47. }