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

Comparing ray/src/common/calexpr.c (file contents):
Revision 2.34 by greg, Sun Jul 25 05:50:27 2010 UTC vs.
Revision 2.36 by greg, Sat Aug 1 23:27:04 2015 UTC

# Line 295 | Line 295 | epow(
295      errno = 0;
296      d = pow(evalue(ep1), evalue(ep1->sibling));
297   #ifdef  isnan
298 <    if (errno == 0)
298 >    if (errno == 0) {
299          if (isnan(d))
300              errno = EDOM;
301          else if (isinf(d))
302              errno = ERANGE;
303 +    }
304   #endif
305      if (errno == EDOM || errno == ERANGE) {
306          wputs("Illegal power\n");
# Line 619 | Line 620 | getE2(void)                    /* E2 -> E2 MULOP E3 */
620                  EPNODE  *ep3 = ep1->sibling;
621                  if (ep1->type == NUM && ep3->type == NUM) {
622                          ep2 = rconst(ep2);
623 <                } else if (ep3->type == NUM && ep3->v.num == 0) {
624 <                        if (ep2->type == '/')
625 <                                syntax("divide by zero constant");
626 <                        ep1->sibling = NULL;    /* (E2 * 0) */
627 <                        epfree(ep2);
628 <                        ep2 = ep3;
623 >                } else if (ep3->type == NUM) {
624 >                        if (ep2->type == '/') {
625 >                                if (ep3->v.num == 0)
626 >                                        syntax("divide by zero constant");
627 >                                ep2->type = '*';        /* for speed */
628 >                                ep3->v.num = 1./ep3->v.num;
629 >                        } else if (ep3->v.num == 0) {
630 >                                ep1->sibling = NULL;    /* (E2 * 0) */
631 >                                epfree(ep2);
632 >                                ep2 = ep3;
633 >                        }
634                  } else if (ep1->type == NUM && ep1->v.num == 0) {
635                          epfree(ep3);            /* (0 * E3) or (0 / E3) */
636                          ep1->sibling = NULL;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines