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 /bignum.c | |
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
Diffstat (limited to 'bignum.c')
-rw-r--r-- | bignum.c | 24 |
1 files changed, 18 insertions, 6 deletions
@@ -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); |