Ciao,

Il 2019-10-04 14:31 ni...@lysator.liu.se ha scritto:
Depends on the details... Say we start with r in canonical

Additive redc:

  r' = (r^2 + q m) / B < m^2 / B + m

Subtractive redc:

  r' = (r^2 - qm) / B, -m < r' < m^2 / B

This can obviously underflow, and if we check for that and add back m,
we get canonical representation, 0 <= r' < m.

A subtle advantage of subtractive redc is that in the double-limb
subtraction r^2 - qm, the low limb always cancel, with no borrow, so we
only need to subtract the high libms.

Thanks for the details! I tried the subrtactive redc for MPN_REDC_0 in mpn/generic/powm.c, and the resulting code seems cleaner and a little bit faster.

We are arguing again about the time spent in Miller-Rabin for nextprime... and we just released... so now we can experiment brand new code... That's why I pushed an implementation to specialise mpn_powm for the case base==2.
https://gmplib.org/repo/gmp/rev/63e53ddfd210

Comments are welcome.

Ĝis,
m
_______________________________________________
gmp-devel mailing list
gmp-devel@gmplib.org
https://gmplib.org/mailman/listinfo/gmp-devel

Reply via email to