summaryrefslogtreecommitdiff
path: root/src/lib/math/atan.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-01-15 19:11:32 -0800
committerRuss Cox <rsc@golang.org>2009-01-15 19:11:32 -0800
commit0e3a148e3bfda8a50b49777d0588eaac21b90aed (patch)
treecd5e9599203c9bdf211a79358416c3fe447a2a5d /src/lib/math/atan.go
parentec57a60bebcacf864189f04e538db6eed25e8286 (diff)
downloadgolang-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.go47
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));
}
/*