diff --git a/mrbgems/mruby-bigint/core/bigint.c b/mrbgems/mruby-bigint/core/bigint.c index 5964d0279..1d3edf588 100644 --- a/mrbgems/mruby-bigint/core/bigint.c +++ b/mrbgems/mruby-bigint/core/bigint.c @@ -459,34 +459,36 @@ udiv(mrb_state *mrb, mpz_t *qq, mpz_t *rr, mpz_t *xx, mpz_t *yy) size_t xd = digits(&x); mpz_realloc(mrb, &q, xd); mp_dbl_limb z = y.p[yd-1]; - for (size_t j=xd-yd;; j--) { - mp_dbl_limb_signed b=0; - mp_dbl_limb qhat; + if (xd>=yd) { + for (size_t j=xd-yd;; j--) { + mp_dbl_limb_signed b=0; + mp_dbl_limb qhat; - if (j+yd == xd) - qhat = x.p[j+yd-1] / z; - else - qhat = (((mp_dbl_limb)x.p[j+yd] << DIG_SIZE) + x.p[j+yd-1]) / z; - if (qhat) { - for (i=0; isz; urshift(mrb, rr, &x, ns);