瀏覽代碼

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

Jeffrey Wilcke 8 年之前
父節點
當前提交
bf21549faa
共有 2 個文件被更改,包括 5 次插入2 次删除
  1. 3 0
      common/math/exp.go
  2. 2 2
      common/math/integer.go

+ 3 - 0
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)

+ 2 - 2
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
 }