409 |
|
DATARRAY sd; |
410 |
|
int stride, i; |
411 |
|
double x, c0, c1, y0, y1; |
412 |
+ |
/* unlikely, but may as well check */ |
413 |
+ |
if ((-FTINY <= coef) & (coef <= FTINY)) |
414 |
+ |
return(0.); |
415 |
|
/* set up dimensions for recursion */ |
416 |
|
if (dp->nd > 1) { |
417 |
|
sd.name = dp->name; |
433 |
|
i = dp->dim[0].ne - 2; |
434 |
|
} else { /* unevenly spaced points */ |
435 |
|
int lower, upper; |
436 |
< |
if (dp->dim[0].siz > 0.0) { |
436 |
> |
if (dp->dim[0].siz > 0.) { |
437 |
|
lower = 0; |
438 |
|
upper = dp->dim[0].ne; |
439 |
|
} else { |
478 |
|
for (i = sd.dim[0].ne; i--; ) |
479 |
|
rvec[i] += c0*sd.arr.d[i] |
480 |
|
+ c1*sd.arr.d[i+stride]; |
481 |
< |
return(0.); |
479 |
< |
} |
480 |
< |
if (dp->type == SPECTY) { |
481 |
> |
} else if (dp->type == SPECTY) { |
482 |
|
double f; |
483 |
|
sd.arr.s = dp->arr.s + i*stride; |
484 |
< |
f = ldexp(1.0, (int)sd.arr.s[sd.dim[0].ne] |
485 |
< |
- (COLXS+8)); |
486 |
< |
for (i = sd.dim[0].ne; i--; ) |
487 |
< |
rvec[i] += c0*f*(sd.arr.s[i] + 0.5); |
484 |
> |
if ((sd.arr.s[sd.dim[0].ne] > 0) & ((-FTINY>c0)|(c0>FTINY))) { |
485 |
> |
f = ldexp(c0, (int)sd.arr.s[sd.dim[0].ne]-(COLXS+8)); |
486 |
> |
for (i = sd.dim[0].ne; i--; ) |
487 |
> |
rvec[i] += f*(sd.arr.s[i] + .5); |
488 |
> |
} |
489 |
|
sd.arr.s += stride; |
490 |
< |
f = ldexp(1.0, (int)sd.arr.s[sd.dim[0].ne] |
491 |
< |
- (COLXS+8)); |
490 |
> |
if ((sd.arr.s[sd.dim[0].ne] > 0) & ((-FTINY>c1)|(c1>FTINY))) { |
491 |
> |
f = ldexp(c1, (int)sd.arr.s[sd.dim[0].ne]-(COLXS+8)); |
492 |
> |
for (i = sd.dim[0].ne; i--; ) |
493 |
> |
rvec[i] += f*(sd.arr.s[i] + .5); |
494 |
> |
} |
495 |
> |
} else { |
496 |
> |
sd.arr.c = dp->arr.c + i*stride; |
497 |
|
for (i = sd.dim[0].ne; i--; ) |
498 |
< |
rvec[i] += c1*f*(sd.arr.s[i] + 0.5); |
499 |
< |
return(0.); |
498 |
> |
rvec[i] += c0*colrval(sd.arr.c[i],sd.type) |
499 |
> |
+ c1*colrval(sd.arr.c[i+stride],sd.type); |
500 |
|
} |
501 |
< |
sd.arr.c = dp->arr.c + i*stride; |
495 |
< |
for (i = sd.dim[0].ne; i--; ) |
496 |
< |
rvec[i] += c0*colrval(sd.arr.c[i],sd.type) |
497 |
< |
+ c1*colrval(sd.arr.c[i+stride],sd.type); |
498 |
< |
return(0.); |
501 |
> |
return(0.); /* return value ignored */ |
502 |
|
} |
503 |
|
/* get dependent variable */ |
504 |
|
if (dp->nd > 1) { |
522 |
|
y1 = dp->arr.d[i+1]; |
523 |
|
} else if (dp->type == SPECTY) { |
524 |
|
if (dp->arr.s[dp->dim[0].ne]) { |
525 |
< |
double f = ldexp(1.0, -(COLXS+8) + |
526 |
< |
(int)dp->arr.s[dp->dim[0].ne]); |
527 |
< |
y0 = (dp->arr.s[i] + 0.5)*f; |
528 |
< |
y1 = (dp->arr.s[i+1] + 0.5)*f; |
525 |
> |
double f = dp->arr.s[dp->dim[0].ne] |
526 |
> |
? ldexp(1., -(COLXS+8) + |
527 |
> |
(int)dp->arr.s[dp->dim[0].ne]) |
528 |
> |
: 0.; |
529 |
> |
y0 = f*(dp->arr.s[i] + 0.5); |
530 |
> |
y1 = f*(dp->arr.s[i+1] + 0.5); |
531 |
|
} else |
532 |
< |
y0 = y1 = 0.0; |
532 |
> |
y0 = y1 = 0.; |
533 |
|
} else { |
534 |
|
y0 = colrval(dp->arr.c[i],dp->type); |
535 |
|
y1 = colrval(dp->arr.c[i+1],dp->type); |