Goで絶対値を取るときのベストプラクティス
This content is a draft and will not be included in production builds.
golang-nutsでmath.Abs vs if value < 0というスレッドがあった。これによると、
if v < 0.0 { return -v}return v上記のコードでは -0.0 に対応できない点と、パフォーマンスの面でもCPU上で分岐が発生するので、math.Abs を使うほうが早いんじゃないかとのことだった。src/math/abs.goの実装をみると単にビットを落としているだけで、確かに分岐はない。
Float64frombits(Float64bits(x) &^ (1 << 63))整数の場合は max を使うのがいいと思うが、math.MinInt32 ではどうなるのか。どういうわけかマイナスの最小値が取れる。
func abs(v int32) int32 { return max(v, -v)}
func main() { fmt.Println(abs(math.MinInt32)) // -2147483648}