From 2ea8ddf8c245dd160eacf35409572c28345506f7 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sat, 22 Dec 2018 21:45:18 +0100 Subject: 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 --- miscutils/bc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/miscutils/bc.c b/miscutils/bc.c index 876244b34..d7595ce8e 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c @@ -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(©, a->len); 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; } - b->neg = neg; for (powrdx = a->rdx; !(pow & 1); pow >>= 1) { powrdx <<= 1; -- cgit v1.2.3