A perfect power, and then?
Torbjorn Granlund
tg at gmplib.org
Fri Oct 26 11:32:53 CEST 2012
nisse at lysator.liu.se (Niels Möller) writes:
> Sounds right. Such convolution type sum-of-products might want a
> separate function, returning 3 limbs.
But I'm not talking about a convolution, but about the complete
powering. If x is a candidate nth root, and x^n is of size s bits, I
want to compute a decent approximation of floor (x^n / 2^{s -
GMP_NUMB_BITS}) (a single limb value), and compare that to the input
number which x is supposedly a root of. Simplest way would be to use the
binary powering algorithm, and represent all intermediates as a
normalized limb sized mantissa and a shift count. To use it, one needs a
strict bound on the error, which I guess would depend on n, but I don't
think the error analysis is very difficult. One might even consider
using the floating point hardware.
I misthought... I was someplace in a mid-product limb land, where a
convolution-type thing would be the centre of a binary powering
algorithm.
I would like to avoid fp hardware in the portable parts of GMP. Looping
around umul_ppmm, keeping the msb = 1 should give a few correct bits.
The error will depend on the limb size and on n. For the ASL patch
(artificially small limbs) we might not be able to make this work.
I think that's going to be a lot faster than computing any middle limbs,
and that it's going to rule out almost all numbers which aren't
perfect n-powers.
It seem very reasonably.
I need to look into the present algorithn to get completely convinced,
though. I was under the impression that it in practice rejected bad n
values after a b-adic run at few-word "precision".
--
Torbjörn
More information about the gmp-devel
mailing list