1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* bignum.c (bigdivrem1): optimization by skipping zeros at the

tail of digits.  a patch from TOYOFUKU Chikanobu
  <nobu_toyofuku at nifty.com> in [ruby-dev:36169].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19171 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2008-09-05 23:25:13 +00:00
parent c8573378f6
commit 7a04666b3c
2 changed files with 9 additions and 2 deletions

View file

@ -12,6 +12,12 @@ Sat Sep 6 07:24:49 2008 Tanaka Akira <akr@fsij.org>
* io.c (rb_io_extract_modeenc): raise an error for ASCII incompatible
encoding without binmode.
Sat Sep 6 07:12:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* bignum.c (bigdivrem1): optimization by skipping zeros at the
tail of digits. a patch from TOYOFUKU Chikanobu
<nobu_toyofuku at nifty.com> in [ruby-dev:36169].
Sat Sep 6 06:28:46 2008 Tanaka Akira <akr@fsij.org>
* enc/trans/escape.trans: new file.

View file

@ -1633,19 +1633,20 @@ bigdivrem1(void *ptr)
{
struct big_div_struct *bds = (struct big_div_struct*)ptr;
long nx = bds->nx, ny = bds->ny;
long i, j;
long i, j, nyzero;
BDIGIT *yds = bds->yds, *zds = bds->zds;
BDIGIT_DBL t2;
BDIGIT_DBL_SIGNED num;
BDIGIT q;
j = nx==ny?nx+1:nx;
for (nyzero = 0; !yds[nyzero]; nyzero++);
do {
if (bds->stop) return Qnil;
if (zds[j] == yds[ny-1]) q = BIGRAD-1;
else q = (BDIGIT)((BIGUP(zds[j]) + zds[j-1])/yds[ny-1]);
if (q) {
i = 0; num = 0; t2 = 0;
i = nyzero; num = 0; t2 = 0;
do { /* multiply and subtract */
BDIGIT_DBL ee;
t2 += (BDIGIT_DBL)yds[i] * q;