common/math: "optimised" SafeMul and added comment on Exp (#3675)

This commit is contained in:
Jeffrey Wilcke 2017-02-17 18:39:43 +01:00 committed by GitHub
parent 6f74fb962e
commit bf21549faa
2 changed files with 5 additions and 2 deletions

@ -27,6 +27,9 @@ const wordSize = 32 << (uint64(^big.Word(0)) >> 63)
// Exp implement exponentiation by squaring algorithm. // Exp implement exponentiation by squaring algorithm.
// //
// Exp return a new variable; base and exponent must
// not be changed under any circumstance.
//
// Courtesy @karalabe and @chfast // Courtesy @karalabe and @chfast
func Exp(base, exponent *big.Int) *big.Int { func Exp(base, exponent *big.Int) *big.Int {
result := big.NewInt(1) result := big.NewInt(1)

@ -18,8 +18,8 @@ func SafeAdd(x, y uint64) (uint64, bool) {
// SafeMul returns multiplication result and whether overflow occurred. // SafeMul returns multiplication result and whether overflow occurred.
func SafeMul(x, y uint64) (uint64, bool) { func SafeMul(x, y uint64) (uint64, bool) {
if x == 0 { if x == 0 || y == 0 {
return 0, false return 0, false
} }
return x * y, x != 0 && y != 0 && y > gmath.MaxUint64/x return x * y, y > gmath.MaxUint64/x
} }