]> Cypherpunks repositories - gostls13.git/commitdiff
math: delete non-Sqrt-based Hypot
authorRuss Cox <rsc@golang.org>
Tue, 13 Dec 2011 22:08:56 +0000 (17:08 -0500)
committerRuss Cox <rsc@golang.org>
Tue, 13 Dec 2011 22:08:56 +0000 (17:08 -0500)
I was confused by the existence of two portable Hypot
routines in the tree when I cleaned things up, and I made
ARM use the wrong (imprecise) one.  Use the right one,
and delete the wrong one.

Fixes arm build.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5485065

src/pkg/math/all_test.go
src/pkg/math/export_test.go
src/pkg/math/hypot.go
src/pkg/math/hypot_arm.s

index 7091c035ab1cdf4ca324aff05900bfda576f04ed..0a3cb0315d24d521a359d3e7c98aa3d52ea4a901 100644 (file)
@@ -2062,30 +2062,16 @@ func TestHypot(t *testing.T) {
        }
 }
 
-func TestHypotSqrtGo(t *testing.T) {
+func TestHypotGo(t *testing.T) {
        for i := 0; i < len(vf); i++ {
                a := Abs(1e200 * tanh[i] * Sqrt(2))
-               if f := HypotSqrtGo(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
-                       t.Errorf("HypotSqrtGo(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
+               if f := HypotGo(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
+                       t.Errorf("HypotGo(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
                }
        }
        for i := 0; i < len(vfhypotSC); i++ {
-               if f := HypotSqrtGo(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
-                       t.Errorf("HypotSqrtGo(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
-               }
-       }
-}
-
-func TestHypotNoSqrtGo(t *testing.T) {
-       for i := 0; i < len(vf); i++ {
-               a := Abs(1e200 * tanh[i] * Sqrt(2))
-               if f := HypotNoSqrtGo(1e200*tanh[i], 1e200*tanh[i]); !veryclose(a, f) {
-                       t.Errorf("HypotNoSqrtGo(%g, %g) = %g, want %g", 1e200*tanh[i], 1e200*tanh[i], f, a)
-               }
-       }
-       for i := 0; i < len(vfhypotSC); i++ {
-               if f := HypotNoSqrtGo(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
-                       t.Errorf("HypotNoSqrtGo(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
+               if f := HypotGo(vfhypotSC[i][0], vfhypotSC[i][1]); !alike(hypotSC[i], f) {
+                       t.Errorf("HypotGo(%g, %g) = %g, want %g", vfhypotSC[i][0], vfhypotSC[i][1], f, hypotSC[i])
                }
        }
 }
@@ -2741,15 +2727,9 @@ func BenchmarkHypot(b *testing.B) {
        }
 }
 
-func BenchmarkHypotNoSqrtGo(b *testing.B) {
-       for i := 0; i < b.N; i++ {
-               HypotNoSqrtGo(3, 4)
-       }
-}
-
-func BenchmarkHypotSqrtGo(b *testing.B) {
+func BenchmarkHypotGo(b *testing.B) {
        for i := 0; i < b.N; i++ {
-               HypotSqrtGo(3, 4)
+               HypotGo(3, 4)
        }
 }
 
index c32a5dbd1d55b7d14644a2c0255208a5eafcf647..02992d70e8421771ab24b1b30f38d34ccfb49919 100644 (file)
@@ -7,6 +7,5 @@ package math
 // Export internal functions for testing.
 var ExpGo = exp
 var Exp2Go = exp2
-var HypotSqrtGo = hypotSqrt
-var HypotNoSqrtGo = hypotNoSqrt
+var HypotGo = hypot
 var SqrtGo = sqrt
index ee9759ad7ac6651eef82895b76e84a0c8b4ca431..233257b522e509f67e3a3e9e13d0eb68c101b419 100644 (file)
@@ -16,7 +16,7 @@ package math
 //     Hypot(p, q) = NaN if p or q is NaN
 func Hypot(p, q float64) float64
 
-func hypotSqrt(p, q float64) float64 {
+func hypot(p, q float64) float64 {
        // TODO(rsc): Remove manual inlining of IsNaN, IsInf
        // when compiler does it for us
        // special cases
@@ -41,46 +41,3 @@ func hypotSqrt(p, q float64) float64 {
        q = q / p
        return p * Sqrt(1+q*q)
 }
-
-func hypotNoSqrt(p, q float64) float64 {
-       // TODO(rsc): Remove manual inlining of IsNaN, IsInf
-       // when compiler does it for us
-       // special cases
-       switch {
-       case p < -MaxFloat64 || p > MaxFloat64 || q < -MaxFloat64 || q > MaxFloat64: // IsInf(p, 0) || IsInf(q, 0):
-               return Inf(1)
-       case p != p || q != q: // IsNaN(p) || IsNaN(q):
-               return NaN()
-       }
-       if p < 0 {
-               p = -p
-       }
-       if q < 0 {
-               q = -q
-       }
-
-       if p < q {
-               p, q = q, p
-       }
-
-       if p == 0 {
-               return 0
-       }
-
-       pfac := p
-       q = q / p
-       r := q
-       p = 1
-       for {
-               r = r * r
-               s := r + 4
-               if s == 4 {
-                       return p * pfac
-               }
-               r = r / s
-               p = p + 2*r*p
-               q = q * r
-               r = q / p
-       }
-       panic("unreachable")
-}
index f3f492719e32a182df82117bb7a1c7f478c758ae..2c599fd551d0a38d71c0dddce73ff36e619c5ee1 100644 (file)
@@ -3,4 +3,4 @@
 // license that can be found in the LICENSE file.
 
 TEXT ·Hypot(SB),7,$0
-       B ·hypotNoSqrt(SB)
+       B ·hypot(SB)