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:
parent
1557b76edd
commit
2ea8ddf8c2
@ -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;
|
size_t i, powrdx, resrdx;
|
||||||
bool neg;
|
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) {
|
if (b->len == 0) {
|
||||||
bc_num_one(c);
|
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;
|
neg = b->neg;
|
||||||
b->neg = false;
|
b->neg = false;
|
||||||
|
|
||||||
s = zbc_num_ulong(b, &pow);
|
s = zbc_num_ulong(b, &pow);
|
||||||
|
b->neg = neg;
|
||||||
if (s) RETURN_STATUS(s);
|
if (s) RETURN_STATUS(s);
|
||||||
|
// b is not used beyond this point
|
||||||
|
|
||||||
bc_num_init(©, a->len);
|
bc_num_init(©, a->len);
|
||||||
bc_num_copy(©, a);
|
bc_num_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;
|
scale = a->rdx * pow;
|
||||||
}
|
}
|
||||||
|
|
||||||
b->neg = neg;
|
|
||||||
|
|
||||||
for (powrdx = a->rdx; !(pow & 1); pow >>= 1) {
|
for (powrdx = a->rdx; !(pow & 1); pow >>= 1) {
|
||||||
powrdx <<= 1;
|
powrdx <<= 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user