aboutsummaryrefslogtreecommitdiff
path: root/src/math
diff options
context:
space:
mode:
authoreric fang <eric.fang@arm.com>2022-06-29 03:09:54 +0000
committerEric Fang <eric.fang@arm.com>2022-10-01 01:51:35 +0000
commitdd7ce26abf7cf431e7cecf6153fbb8730b1da686 (patch)
tree3d19f6d34887fe6538fe5852846abdcee3f1114b /src/math
parent9a029a69157788d072147732fe2665c58bbbc02c (diff)
downloadgo-dd7ce26abf7cf431e7cecf6153fbb8730b1da686.tar.xz
math: optimize Hypot function
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 <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Eric Fang <eric.fang@arm.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Diffstat (limited to 'src/math')
-rw-r--r--src/math/hypot.go4
1 files 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
}