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/atan.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/atan.go')
-rw-r--r-- | src/lib/math/atan.go | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/src/lib/math/atan.go b/src/lib/math/atan.go index f2fd7ed33..730d50a51 100644 --- a/src/lib/math/atan.go +++ b/src/lib/math/atan.go @@ -4,6 +4,8 @@ package math +import "math" + /* * floating-point arctangent * @@ -13,32 +15,27 @@ package math * coefficients are #5077 from Hart & Cheney. (19.56D) */ -const -( - ap4 = .161536412982230228262e2; - ap3 = .26842548195503973794141e3; - ap2 = .11530293515404850115428136e4; - ap1 = .178040631643319697105464587e4; - ap0 = .89678597403663861959987488e3; - aq4 = .5895697050844462222791e2; - aq3 = .536265374031215315104235e3; - aq2 = .16667838148816337184521798e4; - aq1 = .207933497444540981287275926e4; - aq0 = .89678597403663861962481162e3; - apio2 = .15707963267948966192313216e1; - apio4 = .7853981633974483096156608e0; - asq2p1 = .2414213562373095048802e1; // sqrt(2)+1 - asq2m1 = .414213562373095048802e0; // sqrt(2)-1 -) - /* * xatan evaluates a series valid in the * range [-0.414...,+0.414...]. (tan(pi/8)) */ func xatan(arg float64) float64 { - argsq := arg*arg; - value := ((((ap4*argsq + ap3)*argsq + ap2)*argsq + ap1)*argsq + ap0); - value = value/(((((argsq + aq4)*argsq + aq3)*argsq + aq2)*argsq + aq1)*argsq + aq0); + const + ( + P4 = .161536412982230228262e2; + P3 = .26842548195503973794141e3; + P2 = .11530293515404850115428136e4; + P1 = .178040631643319697105464587e4; + P0 = .89678597403663861959987488e3; + Q4 = .5895697050844462222791e2; + Q3 = .536265374031215315104235e3; + Q2 = .16667838148816337184521798e4; + Q1 = .207933497444540981287275926e4; + Q0 = .89678597403663861962481162e3; + ) + sq := arg*arg; + value := ((((P4*sq + P3)*sq + P2)*sq + P1)*sq + P0); + value = value/(((((sq + Q4)*sq + Q3)*sq + Q2)*sq + Q1)*sq + Q0); return value*arg; } @@ -47,13 +44,13 @@ func xatan(arg float64) float64 { * to the range [0,0.414...] and calls xatan. */ func satan(arg float64) float64 { - if arg < asq2m1 { + if arg < Sqrt2 - 1 { return xatan(arg); } - if arg > asq2p1 { - return apio2 - xatan(1/arg); + if arg > Sqrt2 + 1 { + return Pi/2 - xatan(1/arg); } - return apio4 + xatan((arg-1)/(arg+1)); + return Pi/4 + xatan((arg-1)/(arg+1)); } /* |