diff --git a/scheme/ikarus.numerics.ss b/scheme/ikarus.numerics.ss index c15a826..e0731e4 100644 --- a/scheme/ikarus.numerics.ss +++ b/scheme/ikarus.numerics.ss @@ -1737,7 +1737,9 @@ [(bignum? n) (cond [(fixnum? m) - (foreign-call "ikrt_bnfx_modulo" n m)] + (if (eqv? m 0) + (die 'modulo "division by zero" n m) + (foreign-call "ikrt_bnfx_modulo" n m))] [(bignum? m) (if ($bignum-positive? n) (if ($bignum-positive? m) diff --git a/scheme/last-revision b/scheme/last-revision index dfcbacd..3fb00d8 100644 --- a/scheme/last-revision +++ b/scheme/last-revision @@ -1 +1 @@ -1809 +1810 diff --git a/src/ikarus-numerics.c b/src/ikarus-numerics.c index 5dcabfc..90520ad 100644 --- a/src/ikarus-numerics.c +++ b/src/ikarus-numerics.c @@ -1797,7 +1797,7 @@ ikrt_bnfxdivrem(ikptr x, ikptr y, ikpcb* pcb){ ikptr ikrt_bnfx_modulo(ikptr x, ikptr y /*, ikpcb* pcb */){ - int yint = unfix(y); + long int yint = unfix(y); mp_limb_t* s2p = (mp_limb_t*)(long)(x+off_bignum_data); ikptr fst = ref(x, -vector_tag); mp_size_t s2n = bnfst_limb_count(fst);