diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-05-31 14:57:03 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-05-31 14:57:03 +0000 |
commit | 2a38d9043e2eb16d7f3fcf3460dec5995a3195c6 (patch) | |
tree | 823987a4dffe4fd936847e2c549668ece1b02e6f | |
parent | fc1f9d2cb2ad4592530f0130d75682a6c8b8c6a7 (diff) | |
download | ruby-2a38d9043e2eb16d7f3fcf3460dec5995a3195c6.tar.gz |
* bignum.c (calc_hbase): Extracted from rb_big2str0.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41005 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | bignum.c | 24 |
2 files changed, 22 insertions, 6 deletions
@@ -1,3 +1,7 @@ +Fri May 31 23:56:13 2013 Tanaka Akira <akr@fsij.org> + + * bignum.c (calc_hbase): Extracted from rb_big2str0. + Fri May 31 23:22:24 2013 Tanaka Akira <akr@fsij.org> * bignum.c: Don't hard code SIZEOF_BDIGITS for log_base(hbase). @@ -1119,6 +1119,23 @@ big2str_karatsuba(VALUE x, int base, char* ptr, return lh + ll; } +static void +calc_hbase(int base, long *hbase_p, int *hbase_numdigits_p) +{ + long hbase; + int hbase_numdigits; + + hbase = base*base; + hbase_numdigits = 2; +#if SIZEOF_BDIGITS > 2 + hbase *= hbase; + hbase_numdigits *= 2; +#endif + + *hbase_p = hbase; + *hbase_numdigits_p = hbase_numdigits; +} + VALUE rb_big2str0(VALUE x, int base, int trim) { @@ -1144,12 +1161,7 @@ rb_big2str0(VALUE x, int base, int trim) ptr = RSTRING_PTR(ss); ptr[0] = RBIGNUM_SIGN(x) ? '+' : '-'; - hbase = base*base; - hbase_numdigits = 2; -#if SIZEOF_BDIGITS > 2 - hbase *= hbase; - hbase_numdigits *= 2; -#endif + calc_hbase(base, &hbase, &hbase_numdigits); off = !(trim && RBIGNUM_SIGN(x)); /* erase plus sign if trim */ xx = rb_big_clone(x); RBIGNUM_SET_SIGN(xx, 1); |