1
0
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:
Russ Cox 2015-07-14 22:42:16 -04:00
parent 671bddf0b0
commit bed6326a3c
2 changed files with 9 additions and 2 deletions

View File

@ -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
}

View File

@ -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)
}