diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-06-14 12:05:38 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-06-14 12:05:38 +0000 |
commit | 2f407300fac2f0b3143ccf4db4d7ba57266ce12b (patch) | |
tree | 16bea306a32d34e00477dad81a96e9ab4979aaa4 | |
parent | 48bfbb574ea4112fdaf5d542a2c8d9918afd9237 (diff) | |
download | ruby-2f407300fac2f0b3143ccf4db4d7ba57266ce12b.tar.gz |
* bignum.c (bigdivrem): Reduce number of digits before bignew() for div.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41302 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | bignum.c | 4 |
2 files changed, 6 insertions, 2 deletions
@@ -1,3 +1,7 @@ +Fri Jun 14 20:47:41 2013 Tanaka Akira <akr@fsij.org> + + * bignum.c (bigdivrem): Reduce number of digits before bignew() for div. + Fri Jun 14 20:12:37 2013 Tanaka Akira <akr@fsij.org> * bignum.c (bigdivrem): Use bignew when ny == 1. @@ -3848,11 +3848,11 @@ bigdivrem(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp) if (divp) { /* move quotient down in z */ j = nz - ny; + while (0 < j && !zds[j-1+ny]) + j--; *divp = zz = bignew(j, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y)); qds = BDIGITS(zz); for (i = 0;i < j;i++) qds[i] = zds[i+ny]; - if (!qds[i-1]) - RBIGNUM_SET_LEN(zz, i-1); } if (modp) { /* normalize remainder */ while (ny > 1 && !zds[ny-1]) --ny; |