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 |
} |