测试整数乘法中的溢出

时间:2018-06-07 15:10:47

标签: go

溢出似乎不是go中内置软件包的一部分。

测试在乘以2个整数时不会溢出的最佳方法是什么?

类似于Java Math.multiplyExact ...

的东西

1 个答案:

答案 0 :(得分:2)

您可以根据此主题中的建议编写自己的const mostNegative = -(mostPositive + 1) const mostPositive = 1<<63 - 1 func multiplyExact(a, b int64) (int64, error) { result := a * b if a == 0 || b == 0 || a == 1 || b == 1 { return result, nil } if a == mostNegative || b == mostNegative { return result, fmt.Errorf("Overflow multiplying %v and %v", a, b) } if result/b != a { return result, fmt.Errorf("Overflow multiplying %v and %v", a, b) } return result, nil }

https://groups.google.com/forum/#!msg/golang-nuts/h5oSN5t3Au4/KaNQREhZh0QJ

{{1}}

游乐场:https://play.golang.org/p/V_TSC44VcPY