Hi, When p->scale is not zero, bexp() calculates the same value twice, first in split_number() and then in normalize(). This can be avoided by simply reusing the result produced by the former. (While here, also fold a long line.)
Index: bcode.c =================================================================== RCS file: /cvs/src/usr.bin/dc/bcode.c,v retrieving revision 1.61 diff -u -p -r1.61 bcode.c --- bcode.c 12 Dec 2017 19:07:10 -0000 1.61 +++ bcode.c 17 Dec 2017 13:18:15 -0000 @@ -1178,11 +1178,11 @@ bexp(void) bn_checkp(f); split_number(p, i, f); if (!BN_is_zero(f)) - warnx("Runtime warning: non-zero fractional part in exponent"); - BN_free(i); + warnx("Runtime warning: non-zero fractional part " + "in exponent"); + BN_free(p->number); + p->number = i; BN_free(f); - - normalize(p, 0); } neg = BN_is_negative(p->number); Regards, kshe