Commit 497d2417 authored by Plekhanov Maxim's avatar Plekhanov Maxim Committed by Brad Fitzpatrick

math: use Abs in Mod rather than if x < 0 { x = -x}

goos: linux
goarch: amd64
pkg: math

name  old time/op  new time/op  delta
Mod   64.7ns ± 2%  63.7ns ± 2%  -1.52%  (p=0.003 n=8+10)

Change-Id: I851bec0fd6c223dab73e4a680b7393d49e81a0e8
Reviewed-on: https://go-review.googlesource.com/c/85095Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent f22c357a
...@@ -24,16 +24,12 @@ func mod(x, y float64) float64 { ...@@ -24,16 +24,12 @@ func mod(x, y float64) float64 {
if y == 0 || IsInf(x, 0) || IsNaN(x) || IsNaN(y) { if y == 0 || IsInf(x, 0) || IsNaN(x) || IsNaN(y) {
return NaN() return NaN()
} }
if y < 0 { y = Abs(y)
y = -y
}
yfr, yexp := Frexp(y) yfr, yexp := Frexp(y)
sign := false
r := x r := x
if x < 0 { if x < 0 {
r = -x r = -x
sign = true
} }
for r >= y { for r >= y {
...@@ -43,7 +39,7 @@ func mod(x, y float64) float64 { ...@@ -43,7 +39,7 @@ func mod(x, y float64) float64 {
} }
r = r - Ldexp(y, rexp-yexp) r = r - Ldexp(y, rexp-yexp)
} }
if sign { if x < 0 {
r = -r r = -r
} }
return r return r
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment