From 65575bab02a2ff13b1b41f2c47b934f0c8b44002 Mon Sep 17 00:00:00 2001 From: akr Date: Thu, 13 Jun 2013 15:15:07 +0000 Subject: * bignum.c (bigdivrem): Zero test condition simplified. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ bignum.c | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) 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; -- cgit v1.2.3