math: use Abs rather than if x < 0 { x = -x }
This is the benchmark result base on darwin with amd64 architecture:
name old time/op new time/op delta
Cos 10.2ns ± 2% 10.3ns ± 3% +1.18% (p=0.032 n=10+10)
Cosh 25.3ns ± 3% 24.6ns ± 2% -3.00% (p=0.000 n=10+10)
Hypot 6.40ns ± 2% 6.19ns ± 3% -3.36% (p=0.000 n=10+10)
HypotGo 7.16ns ± 3% 6.54ns ± 2% -8.66% (p=0.000 n=10+10)
J0 66.0ns ± 2% 63.7ns ± 1% -3.42% (p=0.000 n=9+10)
Fixes #21812
Change-Id: I2b88fbdfc250cd548f8f08b44ce2eb172dcacf43
Reviewed-on: https://go-review.googlesource.com/84437
Reviewed-by: Giovanni Bajo <rasky@develer.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Giovanni Bajo <rasky@develer.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/src/math/hypot.go b/src/math/hypot.go
index 2087cb0..c7f19d4 100644
--- a/src/math/hypot.go
+++ b/src/math/hypot.go
@@ -26,12 +26,7 @@
case IsNaN(p) || IsNaN(q):
return NaN()
}
- if p < 0 {
- p = -p
- }
- if q < 0 {
- q = -q
- }
+ p, q = Abs(p), Abs(q)
if p < q {
p, q = q, p
}
diff --git a/src/math/j0.go b/src/math/j0.go
index fe26791..5523fc3 100644
--- a/src/math/j0.go
+++ b/src/math/j0.go
@@ -99,9 +99,7 @@
return 1
}
- if x < 0 {
- x = -x
- }
+ x = Abs(x)
if x >= 2 {
s, c := Sincos(x)
ss := s - c
diff --git a/src/math/sin.go b/src/math/sin.go
index 7a75a5f..929cac3 100644
--- a/src/math/sin.go
+++ b/src/math/sin.go
@@ -131,9 +131,7 @@
// make argument positive
sign := false
- if x < 0 {
- x = -x
- }
+ x = Abs(x)
j := int64(x * M4PI) // integer part of x/(Pi/4), as integer for tests on the phase angle
y := float64(j) // integer part of x/(Pi/4), as float
diff --git a/src/math/sinh.go b/src/math/sinh.go
index 2bdd7b1..30bbc06 100644
--- a/src/math/sinh.go
+++ b/src/math/sinh.go
@@ -71,9 +71,7 @@
func Cosh(x float64) float64
func cosh(x float64) float64 {
- if x < 0 {
- x = -x
- }
+ x = Abs(x)
if x > 21 {
return Exp(x) / 2
}