develooper Front page | perl.vmsperl | Postings from June 2002

[PATCH] pp.c:pp_pow() -- quit when you're done

Thread Next
Craig A. Berry
June 15, 2002 16:58
[PATCH] pp.c:pp_pow() -- quit when you're done
Message ID:
A for loop in pp_pow is constructed in such a way that it squares the 
base again even after it's iterated through all the bits of the 
exponent.  This could be a problem on any system where floating 
overflow causes an exception; I noticed it with the D_FLOAT format on 
OpenVMS Alpha, where it was causing Perl to blow up when running 
p/op/pow.t.  The patch below fixes it by exiting the loop as soon as 
we know we can.

If someone strongly objects to having this test inside the loop, I 
can ifdef it.

--- pp.c;-0	Fri Jun  7 09:24:27 2002
+++ pp.c	Sat Jun 15 15:10:13 2002
@@ -956,6 +956,8 @@
                             result *= base;
                             /* Only bother to clear the bit if it is set.  */
                             power &= ~bit;
+                           /* Avoid squaring base again if we're done. */
+                           if (power == 0) break;
[end of patch]
Craig A. Berry

"... getting out of a sonnet is much more
 difficult than getting in."
                 Brad Leithauser

Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About