~ubuntu-branches/ubuntu/wily/proj/wily

« back to all changes in this revision

Viewing changes to src/biveval.c

  • Committer: Package Import Robot
  • Author(s): Francesco Paolo Lovergine, Jerome Villeneuve Larouche, Francesco Paolo Lovergine
  • Date: 2013-11-25 15:11:25 UTC
  • mfrom: (1.2.7)
  • Revision ID: package-import@ubuntu.com-20131125151125-mvcw144wvgep1hev
Tags: 4.8.0-1
[ Jerome Villeneuve Larouche ]
* New upstream release
* Modified libproj-dev.install to remove nad_list.h and projects.h
* Modified proj-bin.install to remove nad2nad
* Modified proj-bin.manpages to remove nad2nad man
* Added symbols for libproj0

[ Francesco Paolo Lovergine ]
* Properly merged with current git master and sid version 4.7.0-2.
* Removed proj transitional package and obsolete conflicts/replaces against
  series 4.6 and older.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
# include <projects.h>
3
3
# define NEAR_ONE       1.00001
4
4
static double ceval(struct PW_COEF *C, int n, projUV w, projUV w2) {
5
 
        double d=0, dd=0, vd, vdd, tmp, *c;
6
 
        int j;
 
5
    double d=0, dd=0, vd, vdd, tmp, *c;
 
6
    int j;
7
7
 
8
 
        for (C += n ; n-- ; --C ) {
9
 
                if (j = C->m) {
10
 
                        vd = vdd = 0.;
11
 
                        for (c = C->c + --j; j ; --j ) {
12
 
                                vd = w2.v * (tmp = vd) - vdd + *c--;
13
 
                                vdd = tmp;
14
 
                        }
15
 
                        d = w2.u * (tmp = d) - dd + w.v * vd - vdd + 0.5 * *c;
16
 
                } else
17
 
                        d = w2.u * (tmp = d) - dd;
18
 
                dd = tmp;
19
 
        }
20
 
        if (j = C->m) {
21
 
                vd = vdd = 0.;
22
 
                for (c = C->c + --j; j ; --j ) {
23
 
                        vd = w2.v * (tmp = vd) - vdd + *c--;
24
 
                        vdd = tmp;
25
 
                }
26
 
                return (w.u * d - dd + 0.5 * ( w.v * vd - vdd + 0.5 * *c ));
27
 
        } else
28
 
                return (w.u * d - dd);
 
8
    for (C += n ; n-- ; --C ) {
 
9
        if ( (j = C->m) != 0) {
 
10
            vd = vdd = 0.;
 
11
            for (c = C->c + --j; j ; --j ) {
 
12
                vd = w2.v * (tmp = vd) - vdd + *c--;
 
13
                vdd = tmp;
 
14
            }
 
15
            d = w2.u * (tmp = d) - dd + w.v * vd - vdd + 0.5 * *c;
 
16
        } else
 
17
            d = w2.u * (tmp = d) - dd;
 
18
        dd = tmp;
 
19
    }
 
20
    if ( (j = C->m) != 0 ) {
 
21
        vd = vdd = 0.;
 
22
        for (c = C->c + --j; j ; --j ) {
 
23
            vd = w2.v * (tmp = vd) - vdd + *c--;
 
24
            vdd = tmp;
 
25
        }
 
26
        return (w.u * d - dd + 0.5 * ( w.v * vd - vdd + 0.5 * *c ));
 
27
    } else
 
28
        return (w.u * d - dd);
29
29
}
30
 
        projUV /* bivariate Chebyshev polynomial entry point */
 
30
 
 
31
projUV /* bivariate Chebyshev polynomial entry point */
31
32
bcheval(projUV in, Tseries *T) {
32
 
        projUV w2, w;
33
 
        projUV out;
34
 
                /* scale to +-1 */
35
 
        w.u = ( in.u + in.u - T->a.u ) * T->b.u;
36
 
        w.v = ( in.v + in.v - T->a.v ) * T->b.v;
37
 
        if (fabs(w.u) > NEAR_ONE || fabs(w.v) > NEAR_ONE) {
38
 
                out.u = out.v = HUGE_VAL;
39
 
                pj_errno = -36;
40
 
        } else { /* double evaluation */
41
 
                w2.u = w.u + w.u;
42
 
                w2.v = w.v + w.v;
43
 
                out.u = ceval(T->cu, T->mu, w, w2);
44
 
                out.v = ceval(T->cv, T->mv, w, w2);
45
 
        }
46
 
        return out;
 
33
    projUV w2, w;
 
34
    projUV out;
 
35
    /* scale to +-1 */
 
36
    w.u = ( in.u + in.u - T->a.u ) * T->b.u;
 
37
    w.v = ( in.v + in.v - T->a.v ) * T->b.v;
 
38
    if (fabs(w.u) > NEAR_ONE || fabs(w.v) > NEAR_ONE) {
 
39
        out.u = out.v = HUGE_VAL;
 
40
        pj_errno = -36;
 
41
    } else { /* double evaluation */
 
42
        w2.u = w.u + w.u;
 
43
        w2.v = w.v + w.v;
 
44
        out.u = ceval(T->cu, T->mu, w, w2);
 
45
        out.v = ceval(T->cv, T->mv, w, w2);
 
46
    }
 
47
    return out;
47
48
}
48
 
        projUV /* bivariate power polynomial entry point */
 
49
 
 
50
projUV /* bivariate power polynomial entry point */
49
51
bpseval(projUV in, Tseries *T) {
50
 
        projUV out;
51
 
        double *c, row;
52
 
        int i, m;
 
52
    projUV out;
 
53
    double *c, row;
 
54
    int i, m;
53
55
 
54
 
        out.u = out.v = 0.;
55
 
        for (i = T->mu; i >= 0; --i) {
56
 
                row = 0.;
57
 
                if (m = T->cu[i].m) {
58
 
                        c = T->cu[i].c + m;
59
 
                        while (m--)
60
 
                                row = *--c + in.v * row;
61
 
                }
62
 
                out.u = row + in.u * out.u;
63
 
        }
64
 
        for (i = T->mv; i >= 0; --i) {
65
 
                row = 0.;
66
 
                if (m = T->cv[i].m) {
67
 
                        c = T->cv[i].c + m;
68
 
                        while (m--)
69
 
                                row = *--c + in.v * row;
70
 
                }
71
 
                out.v = row + in.u * out.v;
72
 
        }
73
 
        return out;
 
56
    out.u = out.v = 0.;
 
57
    for (i = T->mu; i >= 0; --i) {
 
58
        row = 0.;
 
59
        if ((m = T->cu[i].m) != 0) {
 
60
            c = T->cu[i].c + m;
 
61
            while (m--)
 
62
                row = *--c + in.v * row;
 
63
        }
 
64
        out.u = row + in.u * out.u;
 
65
    }
 
66
    for (i = T->mv; i >= 0; --i) {
 
67
        row = 0.;
 
68
        if ((m = T->cv[i].m) != 0) {
 
69
            c = T->cv[i].c + m;
 
70
            while (m--)
 
71
                row = *--c + in.v * row;
 
72
        }
 
73
        out.v = row + in.u * out.v;
 
74
    }
 
75
    return out;
74
76
}
75
77
 
76
78
projUV /* general entry point selecting evaluation mode */