溢出似乎不是go中内置软件包的一部分。
测试在乘以2个整数时不会溢出的最佳方法是什么?
类似于Java Math.multiplyExact
...
答案 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}}