From ce9c60c1e88ed8876ad3c4b5f06aabbf0f66fb9e Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Mon, 11 Jun 2018 21:29:25 +0200 Subject: [PATCH] Fix (expt 3 -1) when SEXP_USE_BIGNUMS --- eval.c | 5 +++++ lib/chibi/numeric-test.sld | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/eval.c b/eval.c index 0a3a41e6..3d694914 100644 --- a/eval.c +++ b/eval.c @@ -1706,6 +1706,11 @@ 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)) diff --git a/lib/chibi/numeric-test.sld b/lib/chibi/numeric-test.sld index e2c3855d..4fbe926d 100644 --- a/lib/chibi/numeric-test.sld +++ b/lib/chibi/numeric-test.sld @@ -16,8 +16,10 @@ (define (run-tests) (test-begin "numbers") + (test 0 (expt 0 1)) + (test 1 (expt 3 0)) (test 3 (expt 3 1)) - ;(test 1/3 (expt 3 -1)) + (test 1/3 (expt 3 -1)) (test 1/300000000000000000000 (expt 300000000000000000000 -1)) (test '(536870912 536870913 536870911 -536870912 -536870911 -536870913)