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; |
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 = c0*ldexp(1., (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] + 0.5); |
488 |
> |
} |
489 |
|
sd.arr.s += stride; |
490 |
< |
f = ldexp(1.0, (int)sd.arr.s[sd.dim[0].ne] |
491 |
< |
- (COLXS+8)); |
492 |
< |
for (i = sd.dim[0].ne; i--; ) |
493 |
< |
rvec[i] += c1*f*(sd.arr.s[i] + 0.5); |
490 |
> |
if ((sd.arr.s[sd.dim[0].ne] > 0) & ((-FTINY>c1)|(c1>FTINY))) { |
491 |
> |
f = c1*ldexp(1., (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] + 0.5); |
494 |
> |
} |
495 |
|
} else { |
496 |
|
sd.arr.c = dp->arr.c + i*stride; |
497 |
|
for (i = sd.dim[0].ne; i--; ) |
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; |
533 |
|
} else { |