ruby-changes:29038
From: akr <ko1@a...>
Date: Wed, 5 Jun 2013 21:17:45 +0900 (JST)
Subject: [ruby-changes:29038] akr:r41090 (trunk): * bignum.c (big_fdiv): Use nlz() instead of bdigbitsize().
akr 2013-06-05 21:17:30 +0900 (Wed, 05 Jun 2013) New Revision: 41090 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=41090 Log: * bignum.c (big_fdiv): Use nlz() instead of bdigbitsize(). (bdigbitsize): Removed. Modified files: trunk/ChangeLog trunk/bignum.c Index: ChangeLog =================================================================== --- ChangeLog (revision 41089) +++ ChangeLog (revision 41090) @@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Wed Jun 5 21:17:08 2013 Tanaka Akira <akr@f...> + + * bignum.c (big_fdiv): Use nlz() instead of bdigbitsize(). + (bdigbitsize): Removed. + Wed Jun 5 20:32:00 2013 Kenta Murata <mrkn@c...> * include/ruby/ruby.h: fix alignment in comment. Index: bignum.c =================================================================== --- bignum.c (revision 41089) +++ bignum.c (revision 41090) @@ -3050,27 +3050,6 @@ rb_big_divmod(VALUE x, VALUE y) https://github.com/ruby/ruby/blob/trunk/bignum.c#L3050 return rb_assoc_new(bignorm(div), bignorm(mod)); } -static int -bdigbitsize(BDIGIT x) -{ - int size = 1; - int nb = BITSPERDIG / 2; - BDIGIT bits = (~0 << nb); - - if (!x) return 0; - while (x > 1) { - if (x & bits) { - size += nb; - x >>= nb; - } - x &= ~bits; - nb /= 2; - bits >>= nb; - } - - return size; -} - static VALUE big_shift(VALUE x, long n) { @@ -3090,9 +3069,8 @@ big_fdiv(VALUE x, VALUE y) https://github.com/ruby/ruby/blob/trunk/bignum.c#L3069 int i; bigtrunc(x); - l = RBIGNUM_LEN(x) - 1; - ex = l * BITSPERDIG; - ex += bdigbitsize(BDIGITS(x)[l]); + l = RBIGNUM_LEN(x); + ex = l * BITSPERDIG - nlz(BDIGITS(x)[l-1]); ex -= 2 * DBL_BIGDIG * BITSPERDIG; if (ex) x = big_shift(x, ex); @@ -3101,9 +3079,8 @@ big_fdiv(VALUE x, VALUE y) https://github.com/ruby/ruby/blob/trunk/bignum.c#L3079 y = rb_int2big(FIX2LONG(y)); case T_BIGNUM: bigtrunc(y); - l = RBIGNUM_LEN(y) - 1; - ey = l * BITSPERDIG; - ey += bdigbitsize(BDIGITS(y)[l]); + l = RBIGNUM_LEN(y); + ey = l * BITSPERDIG - nlz(BDIGITS(y)[l-1]); ey -= DBL_BIGDIG * BITSPERDIG; if (ey) y = big_shift(y, ey); break; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/