diff --git a/ChangeLog b/ChangeLog index 7f12e0ac81..fa0c3769ed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Fri Jun 14 00:14:29 2013 Tanaka Akira + + * bignum.c (bigdivrem): Zero test condition simplified. + Thu Jun 13 23:43:11 2013 Zachary Scott * ext/bigdecimal/*: improve documentation, nodoc samples with @mrkn diff --git a/bignum.c b/bignum.c index a02f4c4d99..cada8d0658 100644 --- a/bignum.c +++ b/bignum.c @@ -3762,11 +3762,14 @@ bigdivrem(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp) BDIGIT_DBL t2; BDIGIT dd, q; - if (BIGZEROP(y)) rb_num_zerodiv(); - xds = BDIGITS(x); yds = BDIGITS(y); + while (0 < ny && !yds[ny-1]) ny--; + if (ny == 0) + rb_num_zerodiv(); + + xds = BDIGITS(x); while (0 < nx && !xds[nx-1]) nx--; - while (!yds[ny-1]) ny--; + if (nx < ny || (nx == ny && xds[nx - 1] < yds[ny - 1])) { if (divp) *divp = rb_int2big(0); if (modp) *modp = x;