package math import gmath "math" /* * NOTE: The following methods need to be optimised using either bit checking or asm */ // SafeSub returns subtraction result and whether overflow occurred. func SafeSub(x, y uint64) (uint64, bool) { return x - y, x < y } // SafeAdd returns the result and whether overflow occurred. func SafeAdd(x, y uint64) (uint64, bool) { return x + y, y > gmath.MaxUint64-x } // SafeMul returns multiplication result and whether overflow occurred. func SafeMul(x, y uint64) (uint64, bool) { if x == 0 { return 0, false } return x * y, x != 0 && y != 0 && y > gmath.MaxUint64/x }