diff options
| author | eric fang <eric.fang@arm.com> | 2022-06-29 03:09:54 +0000 |
|---|---|---|
| committer | Eric Fang <eric.fang@arm.com> | 2022-10-01 01:51:35 +0000 |
| commit | dd7ce26abf7cf431e7cecf6153fbb8730b1da686 (patch) | |
| tree | 3d19f6d34887fe6538fe5852846abdcee3f1114b /src/math | |
| parent | 9a029a69157788d072147732fe2665c58bbbc02c (diff) | |
| download | go-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.go | 4 |
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 } |
