aboutsummaryrefslogtreecommitdiff
path: root/src/pj_zpoly1.c
diff options
context:
space:
mode:
authorFrank Warmerdam <warmerdam@pobox.com>1999-03-18 16:34:52 +0000
committerFrank Warmerdam <warmerdam@pobox.com>1999-03-18 16:34:52 +0000
commit565a4bd035b9d4a83955808efef20f1d8dfa24cf (patch)
tree75785fc897708023f1ccdaf40079afcbaaf0fd3a /src/pj_zpoly1.c
downloadPROJ-565a4bd035b9d4a83955808efef20f1d8dfa24cf.tar.gz
PROJ-565a4bd035b9d4a83955808efef20f1d8dfa24cf.zip
New
git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@776 4e78687f-474d-0410-85f9-8d5e500ac6b2
Diffstat (limited to 'src/pj_zpoly1.c')
-rw-r--r--src/pj_zpoly1.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/pj_zpoly1.c b/src/pj_zpoly1.c
new file mode 100644
index 00000000..80d85469
--- /dev/null
+++ b/src/pj_zpoly1.c
@@ -0,0 +1,49 @@
+/* evaluate complex polynomial */
+#ifndef lint
+static const char SCCSID[]="@(#)pj_zpoly1.c 4.3 93/06/12 GIE REL";
+#endif
+#include <projects.h>
+/* note: coefficients are always from C_1 to C_n
+** i.e. C_0 == (0., 0)
+** n should always be >= 1 though no checks are made
+*/
+ COMPLEX
+pj_zpoly1(COMPLEX z, COMPLEX *C, int n) {
+ COMPLEX a;
+ double t;
+
+ a = *(C += n);
+ while (n-- > 0) {
+ a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i;
+ a.i = C->i + z.r * a.i + z.i * t;
+ }
+ a.r = z.r * (t = a.r) - z.i * a.i;
+ a.i = z.r * a.i + z.i * t;
+ return a;
+}
+/* evaluate complex polynomial and derivative */
+ COMPLEX
+pj_zpolyd1(COMPLEX z, COMPLEX *C, int n, COMPLEX *der) {
+ COMPLEX a, b;
+ double t;
+ int first = 1;
+
+ a = *(C += n);
+ while (n-- > 0) {
+ if (first) {
+ first = 0;
+ b = a;
+ } else {
+ b.r = a.r + z.r * (t = b.r) - z.i * b.i;
+ b.i = a.i + z.r * b.i + z.i * t;
+ }
+ a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i;
+ a.i = C->i + z.r * a.i + z.i * t;
+ }
+ b.r = a.r + z.r * (t = b.r) - z.i * b.i;
+ b.i = a.i + z.r * b.i + z.i * t;
+ a.r = z.r * (t = a.r) - z.i * a.i;
+ a.i = z.r * a.i + z.i * t;
+ *der = b;
+ return a;
+}