Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libjni-proj4 / src / pj_zpoly1.c @ 24478

History | View | Annotate | Download (1.1 KB)

1
/* evaluate complex polynomial */
2
#ifndef lint
3
static const char SCCSID[]="@(#)pj_zpoly1.c        4.3        93/06/12        GIE        REL";
4
#endif
5
#include <projects.h>
6
/* note: coefficients are always from C_1 to C_n
7
**        i.e. C_0 == (0., 0)
8
**        n should always be >= 1 though no checks are made
9
*/
10
        COMPLEX
11
pj_zpoly1(COMPLEX z, COMPLEX *C, int n) {
12
        COMPLEX a;
13
        double t;
14

    
15
        a = *(C += n);
16
        while (n-- > 0) {
17
                a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i;
18
                a.i = C->i + z.r * a.i + z.i * t;
19
        }
20
        a.r = z.r * (t = a.r) - z.i * a.i;
21
        a.i = z.r * a.i + z.i * t;
22
        return a;
23
}
24
/* evaluate complex polynomial and derivative */
25
        COMPLEX
26
pj_zpolyd1(COMPLEX z, COMPLEX *C, int n, COMPLEX *der) {
27
        COMPLEX a, b;
28
        double t;
29
        int first = 1;
30

    
31
        a = *(C += n);
32
        while (n-- > 0) {
33
                if (first) {
34
                        first = 0;
35
                        b = a;
36
                } else {
37
                        b.r = a.r + z.r * (t = b.r) - z.i * b.i;
38
                        b.i = a.i + z.r * b.i + z.i * t;
39
                }
40
                a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i;
41
                a.i = C->i + z.r * a.i + z.i * t;
42
        }
43
        b.r = a.r + z.r * (t = b.r) - z.i * b.i;
44
        b.i = a.i + z.r * b.i + z.i * t;
45
        a.r = z.r * (t = a.r) - z.i * a.i;
46
        a.i = z.r * a.i + z.i * t;
47
        *der = b;
48
        return a;
49
}