mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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/85095 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
f22c357a34
commit
497d24178f
1 changed files with 2 additions and 6 deletions
|
|
@ -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 {
|
||||||
}
|
}
|
||||||
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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue