From: Russ Cox Date: Sun, 12 Sep 2010 03:41:25 +0000 (-0400) Subject: math: make portable Tan(Pi/2) return NaN X-Git-Tag: weekly.2010-09-15~41 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6e6fc674257ee7dfd5380f386e5f0861ba2f2031;p=gostls13.git math: make portable Tan(Pi/2) return NaN The panic NaN was a translation error. The earliest version said panic "return sys.NaN()", and when sys.NaN came along, it changed to "panic sys.NaN()" instead of "return sys.NaN()". R=r CC=golang-dev https://golang.org/cl/2106049 --- diff --git a/src/pkg/math/all_test.go b/src/pkg/math/all_test.go index 10f1e2435f..54c0cfa925 100644 --- a/src/pkg/math/all_test.go +++ b/src/pkg/math/all_test.go @@ -7,6 +7,7 @@ package math_test import ( "fmt" . "math" + "runtime" "testing" ) @@ -2100,6 +2101,16 @@ func TestTan(t *testing.T) { t.Errorf("Tan(%g) = %g, want %g\n", vfsinSC[i], f, sinSC[i]) } } + + // Make sure portable Tan(Pi/2) doesn't panic (it used to). + // The portable implementation returns NaN. + // Assembly implementations might not, + // because Pi/2 is not exactly representable. + if runtime.GOARCH != "386" { + if f := Tan(Pi / 2); !alike(f, NaN()) { + t.Errorf("Tan(%g) = %g, want %g\n", Pi/2, f, NaN()) + } + } } func TestTanh(t *testing.T) { diff --git a/src/pkg/math/tan.go b/src/pkg/math/tan.go index 842ac64386..a36ebbf449 100644 --- a/src/pkg/math/tan.go +++ b/src/pkg/math/tan.go @@ -54,7 +54,7 @@ func Tan(x float64) float64 { if flag { if temp == 0 { - panic(NaN()) + return NaN() } temp = 1 / temp }