diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-06-13 15:15:07 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-06-13 15:15:07 +0000 |
commit | 65575bab02a2ff13b1b41f2c47b934f0c8b44002 (patch) | |
tree | 027cb0e8240c5f655c735a5b80a69bbb552e41d9 | |
parent | 51c43dba6aa19c8998032f7a1ba730743dbaafed (diff) | |
download | ruby-65575bab02a2ff13b1b41f2c47b934f0c8b44002.tar.gz |
* bignum.c (bigdivrem): Zero test condition simplified.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | bignum.c | 9 |
2 files changed, 10 insertions, 3 deletions
@@ -1,3 +1,7 @@ +Fri Jun 14 00:14:29 2013 Tanaka Akira <akr@fsij.org> + + * bignum.c (bigdivrem): Zero test condition simplified. + Thu Jun 13 23:43:11 2013 Zachary Scott <zachary@zacharyscott.net> * ext/bigdecimal/*: improve documentation, nodoc samples with @mrkn @@ -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; |