226 |
|
{ |
227 |
|
double inpval[MAXCOL]; |
228 |
|
double tally[MAXCOL]; |
229 |
+ |
short rsign[MAXCOL]; |
230 |
|
double result[MAXCOL]; |
231 |
< |
register int n; |
231 |
> |
int n; |
232 |
|
int nread, ncol; |
233 |
|
long nlin, ltotal; |
234 |
|
FILE *fp; |
245 |
|
while (!feof(fp)) { |
246 |
|
if (ltotal == 0) { /* initialize */ |
247 |
|
if (func == MULT) /* special case */ |
248 |
< |
for (n = 0; n < MAXCOL; n++) |
248 |
> |
for (n = 0; n < MAXCOL; n++) { |
249 |
|
tally[n] = 0.0; |
250 |
+ |
rsign[n] = 1; |
251 |
+ |
} |
252 |
|
else |
253 |
|
for (n = 0; n < MAXCOL; n++) |
254 |
|
tally[n] = init_val[func]; |
270 |
|
break; |
271 |
|
case MULT: |
272 |
|
if (inpval[n] == 0.0) |
273 |
< |
break; |
274 |
< |
tally[n] += log(fabs(inpval[n])); |
273 |
> |
rsign[n] = 0; |
274 |
> |
else if (inpval[n] < 0.0) { |
275 |
> |
rsign[n] = -rsign[n]; |
276 |
> |
inpval[n] = -inpval[n]; |
277 |
> |
} |
278 |
> |
if (rsign[n]) |
279 |
> |
tally[n] += log(inpval[n]); |
280 |
|
break; |
281 |
|
case MAX: |
282 |
|
if (inpval[n] > tally[n]) |
302 |
|
result[n] = pow(result[n], 1.0/power); |
303 |
|
} |
304 |
|
if (func == MULT) |
305 |
< |
result[n] = exp(result[n]); |
305 |
> |
result[n] = rsign[n] * exp(result[n]); |
306 |
|
} |
307 |
|
putrecord(result, ncol, stdout); |
308 |
|
if (!subtotal) |