bc: rewrite another for() loop
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 18 Dec 2018 11:43:21 +0000 (12:43 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 18 Dec 2018 11:43:21 +0000 (12:43 +0100)
function                                             old     new   delta
zbc_num_d                                            570     563      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/bc.c

index 6c63c17033196ac7476a76e2f10e6e6992188302..0cd8ba6b44d12ead64e7dd4e11312bcad65a5502 100644 (file)
@@ -1933,7 +1933,6 @@ static FAST_FUNC BC_STATUS zbc_num_d(BcNum *a, BcNum *b, BcNum *restrict c, size
        BcDig *n, *p, q;
        size_t len, end, i;
        BcNum cp;
-       bool zero = true;
 
        if (b->len == 0)
                RETURN_STATUS(bc_error("divide by zero"));
@@ -1961,8 +1960,13 @@ static FAST_FUNC BC_STATUS zbc_num_d(BcNum *a, BcNum *b, BcNum *restrict c, size
        if (scale > cp.rdx) bc_num_extend(&cp, scale - cp.rdx);
 
        if (b->rdx == b->len) {
-               for (i = 0; zero && i < len; ++i) zero = !b->num[len - i - 1];
-               len -= i - 1;
+               for (;;) {
+                       if (len == 0) break;
+                       len--;
+                       if (b->num[len] != 0)
+                               break;
+               }
+               len++;
        }
 
        if (cp.cap == cp.len) bc_num_expand(&cp, cp.len + 1);