]> Cypherpunks repositories - gostls13.git/commitdiff
math: fix Log2 test failures on ppc64 (and s390)
authorRuss Cox <rsc@golang.org>
Wed, 15 Jul 2015 02:42:16 +0000 (22:42 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 15 Jul 2015 05:35:22 +0000 (05:35 +0000)
- 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>
src/math/all_test.go
src/math/log10.go

index 0037b4a64cc0ca00e6443a7072052f5329712e86..e18e45e020228d95d77e779f5f2a8d9e9e54cd6c 100644 (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
                }
index 95cfbf47ce9de2acf1b74013a94780f574b73ada..ccd079d8910b50871927ebf2d393588e136c5876 100644 (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)
 }