mpz_sizeinbase and mpz_root

Kevin Ryde
Sat, 02 Nov 2002 10:00:07 +1000

Jason Moxham <> writes:
> int mpz_root (mpz_t x , mpz_t y , unsigned long k ) when k=2 does not call the 
> sqrt fn's  which are much faster than general k'th root , I suppose this 
> could be added as small patch , if it was thought that the case k=2 is common 
> enough ?

The general rule is that if an application expects a special case like
that very often it should call mpz_sqrt directly.  But a root like
this is pretty slow anyway so maybe a test could be justified.

> same comment for mpz_sizeinbase(mpz_t x, unsigned long k) when k=2
> by using count_leading_zeros and not the bases[] tables , I was suprised that 
> it was that much faster  , in the current code we have an useless division by 
> 1 , which the compiler doesn't recognize. The case k=2 must be fairly common 
> as it can be used for log_base2 .

If you mean mpz_sizeinbase(x,2) from an application, that can be
recognised for gcc, but not otherwise.

If you mean internally to mpz_sizeinbase, well perhaps an inverse for
the divisor would help, sometimes, if we could be bothered setting
that up.