ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cal/total.c
(Generate patch)

Comparing ray/src/cal/total.c (file contents):
Revision 1.6 by greg, Fri Apr 18 16:32:27 2008 UTC vs.
Revision 1.7 by greg, Fri Jan 29 17:21:43 2010 UTC

# Line 226 | Line 226 | char  *fname
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;
# Line 244 | Line 245 | char  *fname
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];
# Line 267 | Line 270 | char  *fname
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])
# Line 294 | Line 302 | char  *fname
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)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines