mirror of
https://github.com/golang/go
synced 2024-11-26 18:26:48 -07:00
math: fix Log2 test failures on ppc64 (and s390)
- Make Log2 exact for powers of two. - Fix error tolerance function to make tolerance a function of the correct (expected) value. Fixes #9066. Change-Id: I0320a93ce4130deed1c7b7685627d51acb7bc56d Reviewed-on: https://go-review.googlesource.com/12230 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
671bddf0b0
commit
bed6326a3c
@ -1730,8 +1730,10 @@ func tolerance(a, b, e float64) bool {
|
||||
d = -d
|
||||
}
|
||||
|
||||
if a != 0 {
|
||||
e = e * a
|
||||
// note: b is correct (expected) value, a is actual value.
|
||||
// make error tolerance a fraction of b, not a.
|
||||
if b != 0 {
|
||||
e = e * b
|
||||
if e < 0 {
|
||||
e = -e
|
||||
}
|
||||
|
@ -18,5 +18,10 @@ func Log2(x float64) float64
|
||||
|
||||
func log2(x float64) float64 {
|
||||
frac, exp := Frexp(x)
|
||||
// Make sure exact powers of two give an exact answer.
|
||||
// Don't depend on Log(0.5)*(1/Ln2)+exp being exactly exp-1.
|
||||
if frac == 0.5 {
|
||||
return float64(exp - 1)
|
||||
}
|
||||
return Log(frac)*(1/Ln2) + float64(exp)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user