26 lines
616 B
Go
26 lines
616 B
Go
|
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
|
||
|
}
|