mirror of https://github.com/golang/go.git
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>
This commit is contained in:
parent
9a029a6915
commit
dd7ce26abf
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue