diff --git a/ChangeLog b/ChangeLog index aa86bec134..f9fa1e7af2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Jun 1 00:19:50 2013 Tanaka Akira + + * bignum.c (calc_hbase): Make hbase the maximum power of base + representable in BDIGIT. + Fri May 31 23:56:13 2013 Tanaka Akira * bignum.c (calc_hbase): Extracted from rb_big2str0. diff --git a/bignum.c b/bignum.c index a19560a609..b8ff3fe76e 100644 --- a/bignum.c +++ b/bignum.c @@ -1125,12 +1125,12 @@ 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 = base; + hbase_numdigits = 1; + while (hbase <= (~(BDIGIT)0) / base) { + hbase *= base; + hbase_numdigits++; + } *hbase_p = hbase; *hbase_numdigits_p = hbase_numdigits;