fix (expt fixnum flonum) by reverting ce9c60c1

This commit is contained in:
Alex Shinn 2019-09-09 23:25:27 +08:00
parent af686a8b50
commit 197894eb87
2 changed files with 2 additions and 6 deletions

7
eval.c
View file

@ -1718,11 +1718,6 @@ sexp sexp_expt_op (sexp ctx, sexp self, sexp_sint_t n, sexp x, sexp e) {
res = sexp_make_flonum(ctx, pow(10.0, 1e100)); /* +inf.0 */
} else if (sexp_bignump(x)) {
res = sexp_bignum_expt(ctx, x, e);
} else if (sexp_fixnump(x)) {
sexp_gc_preserve1(ctx, tmp);
tmp = sexp_fixnum_to_bignum(ctx, x);
res = sexp_bignum_expt(ctx, tmp, e);
sexp_gc_release1(ctx);
} else {
#endif
if (sexp_fixnump(x))
@ -1754,7 +1749,7 @@ sexp sexp_expt_op (sexp ctx, sexp self, sexp_sint_t n, sexp x, sexp e) {
if ((f*1000.0 > SEXP_MAX_FIXNUM) || (f*1000.0 < SEXP_MIN_FIXNUM)
|| (! sexp_fixnump(x)) || (! sexp_fixnump(e)) || (e1 < 0.0)) {
#if SEXP_USE_BIGNUMS
if (sexp_fixnump(x) && sexp_fixnump(e) && (e1 >= 0.0)) {
if (sexp_fixnump(x) && sexp_fixnump(e)) {
sexp_gc_preserve1(ctx, tmp);
tmp = sexp_fixnum_to_bignum(ctx, x);
res = sexp_bignum_expt(ctx, tmp, e);

View file

@ -21,6 +21,7 @@
(test 3 (expt 3 1))
(test 1/3 (expt 3 -1))
(test 1/300000000000000000000 (expt 300000000000000000000 -1))
(test 16384.0 (expt 2 14.0))
(test '(536870912 536870913 536870911 -536870912 -536870911 -536870913)
(integer-neighborhoods (expt 2 29)))