diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2017-02-18 01:39:43 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-18 01:39:43 +0800 |
commit | bf21549faa7de6e2b920855468b14856c6f503c4 (patch) | |
tree | d32e4de3a3d00927744aa43e6ba2aaf526b40b36 | |
parent | 6f74fb962e68ad975289a604a89239c6376fa5e3 (diff) | |
download | dexon-bf21549faa7de6e2b920855468b14856c6f503c4.tar.gz dexon-bf21549faa7de6e2b920855468b14856c6f503c4.tar.zst dexon-bf21549faa7de6e2b920855468b14856c6f503c4.zip |
common/math: "optimised" SafeMul and added comment on Exp (#3675)
-rw-r--r-- | common/math/exp.go | 3 | ||||
-rw-r--r-- | common/math/integer.go | 4 |
2 files changed, 5 insertions, 2 deletions
diff --git a/common/math/exp.go b/common/math/exp.go index 6f6c040e0..113b76b39 100644 --- a/common/math/exp.go +++ b/common/math/exp.go @@ -27,6 +27,9 @@ const wordSize = 32 << (uint64(^big.Word(0)) >> 63) // 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 func Exp(base, exponent *big.Int) *big.Int { result := big.NewInt(1) diff --git a/common/math/integer.go b/common/math/integer.go index 8162b1985..1689b6586 100644 --- a/common/math/integer.go +++ b/common/math/integer.go @@ -18,8 +18,8 @@ func SafeAdd(x, y uint64) (uint64, bool) { // SafeMul returns multiplication result and whether overflow occurred. func SafeMul(x, y uint64) (uint64, bool) { - if x == 0 { + if x == 0 || y == 0 { return 0, false } - return x * y, x != 0 && y != 0 && y > gmath.MaxUint64/x + return x * y, y > gmath.MaxUint64/x } |