# mpz_sizeinbase

Torbjorn Granlund tege@swox.com
04 Nov 2002 15:49:44 +0100

```  > Now, suppose the return value of mpz_sizeinbase(op, base) is
> numdigs and I want to know the *exact* number of digits. The most
> straightforward way is to compare op with base^(numdigs-1) and
> then reduce numdigs by 1 if op is less than base^(numdigs-1). Is
> there a better way?

Not that I know of.

One could compute t=approx(base^n/2^m), where n is initially
chosen to a suitable value less than returned mpz_sizeinbase(op,
base).  During the computation of base^n, low limbs should be

Then, we compute op/t and op/(t+1) and convert these small number
to to base.  If they are the same number of digits, we're done.
Else, decrease m and try again...

On average, this should be very fast.

> By the way, is it too expensive to *always* return the exact
> number of digits when base is not 2 ?

It already does so. :-) (And it always did I think, but it's
has only recently been documented.)

No, the results are exact just for powers of 2.

--
Torbjörn

```