From 9c4443d38c72daafc7ac10656f04929618e6d4ed Mon Sep 17 00:00:00 2001 From: Kevin Ryde Date: Mon, 5 May 2003 22:55:46 +0000 Subject: [PATCH] (scm_difference): In inum - bignum, handle negative inum. --- libguile/numbers.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libguile/numbers.c b/libguile/numbers.c index 7fa97c4c9..602682df6 100644 --- a/libguile/numbers.c +++ b/libguile/numbers.c @@ -3060,7 +3060,14 @@ scm_difference (SCM x, SCM y) int sgn_y = mpz_sgn (SCM_I_BIG_MPZ (y)); SCM result = scm_i_mkbig (); - mpz_ui_sub (SCM_I_BIG_MPZ (result), xx, SCM_I_BIG_MPZ (y)); + if (xx >= 0) + mpz_ui_sub (SCM_I_BIG_MPZ (result), xx, SCM_I_BIG_MPZ (y)); + else + { + /* x - y == -(y + -x) */ + mpz_add_ui (SCM_I_BIG_MPZ (result), SCM_I_BIG_MPZ (y), -xx); + mpz_neg (SCM_I_BIG_MPZ (result), SCM_I_BIG_MPZ (result)); + } scm_remember_upto_here_1 (y); if ((xx < 0 && (sgn_y > 0)) || ((xx > 0) && sgn_y < 0))