bc: do not disallow powers to N.0000 degree - it's even shorter code

function                                             old     new   delta
zbc_num_p                                            440     424     -16

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-12-22 21:45:18 +01:00
parent 1557b76edd
commit 2ea8ddf8c2

View File

@ -2089,7 +2089,8 @@ static FAST_FUNC BC_STATUS zbc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size
size_t i, powrdx, resrdx;
bool neg;
if (b->rdx) RETURN_STATUS(bc_error("non integer number"));
// GNU bc does not allow 2^2.0. We do.
// if (b->rdx) RETURN_STATUS(bc_error("non integer number"));
if (b->len == 0) {
bc_num_one(c);
@ -2109,9 +2110,10 @@ static FAST_FUNC BC_STATUS zbc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size
neg = b->neg;
b->neg = false;
s = zbc_num_ulong(b, &pow);
b->neg = neg;
if (s) RETURN_STATUS(s);
// b is not used beyond this point
bc_num_init(&copy, a->len);
bc_num_copy(&copy, a);
@ -2123,7 +2125,6 @@ static FAST_FUNC BC_STATUS zbc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size
scale = a->rdx * pow;
}
b->neg = neg;
for (powrdx = a->rdx; !(pow & 1); pow >>= 1) {
powrdx <<= 1;