diff options
author | Russ Cox <rsc@golang.org> | 2009-01-15 19:11:32 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-01-15 19:11:32 -0800 |
commit | 0e3a148e3bfda8a50b49777d0588eaac21b90aed (patch) | |
tree | cd5e9599203c9bdf211a79358416c3fe447a2a5d /src/lib/math/sin.go | |
parent | ec57a60bebcacf864189f04e538db6eed25e8286 (diff) | |
download | golang-0e3a148e3bfda8a50b49777d0588eaac21b90aed.tar.gz |
redo and clean up math.
R=r
DELTA=243 (60 added, 72 deleted, 111 changed)
OCL=22909
CL=22912
Diffstat (limited to 'src/lib/math/sin.go')
-rw-r--r-- | src/lib/math/sin.go | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/src/lib/math/sin.go b/src/lib/math/sin.go index 077506b30..6e3fbb28f 100644 --- a/src/lib/math/sin.go +++ b/src/lib/math/sin.go @@ -4,37 +4,34 @@ package math -/* - Coefficients are #3370 from Hart & Cheney (18.80D). -*/ -const -( - sp0 = .1357884097877375669092680e8; - sp1 = -.4942908100902844161158627e7; - sp2 = .4401030535375266501944918e6; - sp3 = -.1384727249982452873054457e5; - sp4 = .1459688406665768722226959e3; - sq0 = .8644558652922534429915149e7; - sq1 = .4081792252343299749395779e6; - sq2 = .9463096101538208180571257e4; - sq3 = .1326534908786136358911494e3; - - spiu2 = .6366197723675813430755350e0; // 2/pi -) +import "math" func sinus(arg float64, quad int) float64 { + // Coefficients are #3370 from Hart & Cheney (18.80D). + const + ( + P0 = .1357884097877375669092680e8; + P1 = -.4942908100902844161158627e7; + P2 = .4401030535375266501944918e6; + P3 = -.1384727249982452873054457e5; + P4 = .1459688406665768722226959e3; + Q0 = .8644558652922534429915149e7; + Q1 = .4081792252343299749395779e6; + Q2 = .9463096101538208180571257e4; + Q3 = .1326534908786136358911494e3; + ) x := arg; if(x < 0) { x = -x; quad = quad+2; } - x = x * spiu2; /* underflow? */ + x = x * (2/Pi); /* underflow? */ var y float64; if x > 32764 { var e float64; e, y = sys.modf(x); e = e + float64(quad); - temsp1, f := sys.modf(0.25*e); + temp1, f := sys.modf(0.25*e); quad = int(e - 4*f); } else { k := int32(x); @@ -49,10 +46,10 @@ func sinus(arg float64, quad int) float64 { y = -y; } - ysq := y*y; - temsp1 := ((((sp4*ysq+sp3)*ysq+sp2)*ysq+sp1)*ysq+sp0)*y; - temsp2 := ((((ysq+sq3)*ysq+sq2)*ysq+sq1)*ysq+sq0); - return temsp1/temsp2; + yy := y*y; + temp1 := ((((P4*yy+P3)*yy+P2)*yy+P1)*yy+P0)*y; + temp2 := ((((yy+Q3)*yy+Q2)*yy+Q1)*yy+Q0); + return temp1/temp2; } export func Cos(arg float64) float64 { |