From dd7ce26abf7cf431e7cecf6153fbb8730b1da686 Mon Sep 17 00:00:00 2001 From: eric fang Date: Wed, 29 Jun 2022 03:09:54 +0000 Subject: [PATCH] math: optimize Hypot function MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This CL optimizes the Hypot function by putting the Abs function in front of the IsInf check. This simplifies the judgment of IsInf. Benchmarks: On linux/arm64, name old time/op new time/op delta Hypot-160 5.26ns ± 0% 4.53ns ± 0% -13.84% (p=0.000 n=4+5) HypotGo-160 5.19ns ± 0% 4.85ns ± 0% -6.53% (p=0.008 n=5+5) On linux/amd64, name old time/op new time/op delta Hypot-44 5.99ns ± 0% 5.99ns ± 0% ~ (p=0.667 n=5+5) HypotGo-44 7.46ns ± 0% 6.61ns ± 0% -11.37% (p=0.008 n=5+5) On darwin/arm64, name old time/op new time/op delta Hypot-8 3.58ns ± 0% 2.79ns ± 0% -22.01% (p=0.008 n=5+5) HypotGo-8 3.58ns ± 0% 2.79ns ± 0% -22.15% (p=0.008 n=5+5) Change-Id: Id79236e01d9494b6e00bbda3ec08c72caf5ef3c1 Reviewed-on: https://go-review.googlesource.com/c/go/+/414974 Reviewed-by: Cherry Mui TryBot-Result: Gopher Robot Run-TryBot: Eric Fang Reviewed-by: Dmitri Shuralyov --- src/math/hypot.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/math/hypot.go b/src/math/hypot.go index 4e79de0e9b..6ae70c1333 100644 --- a/src/math/hypot.go +++ b/src/math/hypot.go @@ -25,14 +25,14 @@ func Hypot(p, q float64) float64 { } func hypot(p, q float64) float64 { + p, q = Abs(p), Abs(q) // special cases switch { - case IsInf(p, 0) || IsInf(q, 0): + case IsInf(p, 1) || IsInf(q, 1): return Inf(1) case IsNaN(p) || IsNaN(q): return NaN() } - p, q = Abs(p), Abs(q) if p < q { p, q = q, p } -- 2.50.0