bc: use unsigned division by 10 instead of signed
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 5 Dec 2018 18:05:32 +0000 (19:05 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 5 Dec 2018 18:05:32 +0000 (19:05 +0100)
function                                             old     new   delta
bc_num_k                                             990     988      -2

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

index 07793e9d413bcdcac160117a935a969897374f9d..6dc79118a6115c22f3e33dc98aa44cfdedabf61e 100644 (file)
@@ -1657,7 +1657,7 @@ static BcStatus bc_num_k(BcNum *restrict a, BcNum *restrict b,
            a->len < BC_NUM_KARATSUBA_LEN || b->len < BC_NUM_KARATSUBA_LEN)
        {
                size_t i, j, len;
-               int carry;
+               unsigned carry;
 
                bc_num_expand(c, a->len + b->len + 1);
 
@@ -1668,8 +1668,9 @@ static BcStatus bc_num_k(BcNum *restrict a, BcNum *restrict b,
 
                        carry = 0;
                        for (j = 0; j < a->len; ++j) {
-                               int in = (int) c->num[i + j];
-                               in += ((int) a->num[j]) * ((int) b->num[i]) + carry;
+                               unsigned in = c->num[i + j];
+                               in += ((unsigned) a->num[j]) * ((unsigned) b->num[i]) + carry;
+                               // note: compilers prefer _unsigned_ div/const
                                carry = in / 10;
                                c->num[i + j] = (BcDig)(in % 10);
                        }