diff --git a/libguile/numbers.c b/libguile/numbers.c index b1c918f0e..ca4330b85 100644 --- a/libguile/numbers.c +++ b/libguile/numbers.c @@ -5466,7 +5466,7 @@ SCM_DEFINE (scm_expt, "expt", 2, 0, 0, "Return @var{x} raised to the power of @var{y}.") #define FUNC_NAME s_scm_expt { - if (!SCM_INEXACTP (y) && scm_is_integer (y)) + if ((SCM_I_INUMP (x) || SCM_BIGP (x)) && scm_is_integer (y)) return scm_integer_expt (x, y); else if (scm_is_real (x) && scm_is_real (y) && scm_to_double (x) >= 0.0) { diff --git a/test-suite/tests/numbers.test b/test-suite/tests/numbers.test index 3f2671207..fae86e410 100644 --- a/test-suite/tests/numbers.test +++ b/test-suite/tests/numbers.test @@ -2875,6 +2875,8 @@ ;;; (with-test-prefix "expt" + (pass-if-exception "non-numeric base" exception:wrong-type-arg + (expt #t 0)) (pass-if "(= 1 (expt 0 0))" (= 1 (expt 0 0))) (pass-if "(= 1 (expt 0 0.0))" (= 1 (expt 0 0.0))) (pass-if "(= 1 (expt 0.0 0))" (= 1 (expt 0.0 0)))